[ 
https://issues.apache.org/jira/browse/CXF-7289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16248587#comment-16248587
 ] 

Niels Bertram commented on CXF-7289:
------------------------------------

Need to get this fixed so got off the couch and had another go.

In {{org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize}} 
we have a CXF parsed list of schema types available under 
{{this.context.get("xmlSchemaCollection")}} but we don't know what Java classes 
they are mapped to. The mapping of Java classes to schema types is only known 
by XJC as the processor of episode files and newly generated code.

The {{org.apache.cxf.tools.util.ClassCollector}} is "injected" into the XJC via 
the {{org.apache.cxf.tools.wsdlto.databinding.jaxb.ClassNameAllocatorImpl}} and 
collects the class names that are generated by XJC. This does neither collect 
inner classes (see comment in {{com.sun.tools.xjc.api.ClassNameAllocator}} 
javadocs) nor does it have any exposure to the mapped classes from prior schema 
episodes.

*Option 1*: Complex but reliable

Inject a "harvester" plugin into the XJC compiler to process the parsed 
schemata in {{Plugin#postProcessModel}} method. Here we simply iterate the 
schemata and element declarations. An episode referenced element declaration 
will carry bind info accordingly. This information can then be stored and used 
during the SEI generation.

The 
[TypeHarvesterPlugin|https://github.com/bertramn/cxf-wsdlgen-issue/blob/master/plugin/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/TypeHarvesterPlugin.java]
 can successfully retrieve following type information from the example:

{code}
{urn:util}Fault => util.Fault
{urn:model}SomeDomainEntity => model.SomeDomainEntity
{urn:model}HomeContact => model.HomeContact
{urn:model}BusinessContact => model.BusinessContact
{urn:service}Dummy => util.Fault
{code}

*Option 2*: Simple but not exact

The other much simpler alternative is to just parse the episode files supplied 
to the XJC context and assume it would have used those to resolve 
{{namespace:Type}} types to Java names.

I'll have a look how best to incorporate the Harvester plugin into the CXF code.

> CXF wsdl2java fails when using existing compilation expisodes of schemata
> -------------------------------------------------------------------------
>
>                 Key: CXF-7289
>                 URL: https://issues.apache.org/jira/browse/CXF-7289
>             Project: CXF
>          Issue Type: Bug
>          Components: JAXB Databinding
>    Affects Versions: 3.1.10
>            Reporter: Niels Bertram
>
> Including a schema from an earlier compilation episode in a wsdl schema with 
> the same namespace will cause to CXF fail when resolving the Java type when 
> constructing the wsdl operation parameter.
> the issue is rather complex to demonstrate so I created a fully functioning 
> compilation project at https://github.com/bertramn/cxf-wsdlgen-issue



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to