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

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

@[~dkulp], I propose the following fix using Option 1 from above. If anyone 
could tell me if there are impacts outside of what I can ascertain from reading 
the code, that would be fantastic.

I coded a simple XJC module and add the known episode references during the XJC 
binding generation processing into the injected cxf ClassCollector 
[here|https://github.com/bertramn/cxf-wsdlgen-issue/blob/56ab4f05f8b76d80b979ec51647ab8bd366cc732/plugin/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/TypeHarvesterPlugin.java#L67].

To tie this together with the CXF binding module following needs to happen. The 
method {{JAXBDataBinding.getType()}} is consulted by 
{{ProcessorUtil.getFullClzName()}} to produce a fully qualified classname when 
constructing the message parts. This method only looks at the raw class model 
generated by the XJC compiler which is not including the episode classes. At 
this point we could also inspect the content of the {{ClassCollector}}. If the 
{{JAXBDataBinding.getType()}} method returns null (QName unknown) the 
{{ProcessorUtil.resolvePartType()}} method is called. This method is only 
having a wild guess about the full classname anyhow (this logic should be 
removed/moved to the getType function - utils are code smell anyways). Also to 
note, this util function looks a bit like a previous attempt to prevent a NPE 
when the referenced body element/type in the WSDL is unknown by the XJC 
generated model (caused by this issue we are trying to fix here).

Thoughts:

{{JAXBDataBinding.getType()}} should never return null because if the class is 
unknown from either generated XJC code model or prior episode file(s), the WSDL 
is invalid.

Enhancing {{JAXBDataBinding.getType()}} to also return a class name for any 
types known from a prior compilation episode will be sufficient to fix this 
issue reliably. The fix would be local to the JAXB binding context.

Given the solution is quite complex resorting to a XJC plugin, we should submit 
a patch to JAXB project to implement an XJC interface to also extract a list of 
prior known model types from compilation episodes.

> 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