CXFers, This is still broke in 2.7.3. That is, in the last three major releases of CXF it is still impossible to name the fields of a data object in all capital letters. This is because the WSDL generated is unusable.
The last time I filed a JIRA with a test case it was moved to the JAXB team who just closed it. Can someone help me get to a resolution on this. I can help with creating test cases etc. It is affecting our migration plans. Cheers Rouble On Tue, Feb 7, 2012 at 6:00 PM, rouble <[email protected]> wrote: > Created CXF-4089: https://issues.apache.org/jira/browse/CXF-4089 > > cheers > rouble > > On Thu, Jan 26, 2012 at 1:43 PM, Daniel Kulp <[email protected]> wrote: >> On Thursday, January 26, 2012 1:33:24 PM rouble wrote: >>> Hi Daniel, >>> >>> In this case FOO and bar, have _identical_ annotations. From what we can >>> tell, the difference in case, is creating the different behavior. >> >> No idea then. Any chance you could create a small testcase and attach to a >> JIRA? >> >> Dan >> >> >> >>> >>> Also, I switched out the CXF 2.4.3 to use CXF 2.4.1's JAXB jars, and the >>> problem still exists. >>> >>> @XmlRootElement(name = "Bar") >>> @XmlAccessorType(XmlAccessType.PROPERTY) >>> @XmlType(name = "Bar") >>> public class Bar { >>> private int intBar; >>> >>> public int getIntBar() { >>> return intBar; >>> } >>> >>> public void setIntBar(int intBar) { >>> this.intBar = intBar; >>> } >>> } >>> >>> @XmlRootElement(name = "FOO") >>> @XmlAccessorType(XmlAccessType.PROPERTY) >>> @XmlType(name = "FOO") >>> public class FOO { >>> >>> private int fooInt; >>> >>> public int getFooInt() { >>> return fooInt; >>> } >>> >>> public void setFooInt(int fooInt) { >>> this.fooInt = fooInt; >>> } >>> } >>> >>> tia >>> rouble >>> >>> On Thu, Jan 26, 2012 at 1:21 PM, Daniel Kulp <[email protected]> wrote: >>> > I believe this may have been due to an update of the version of JAXB >>> > between >>> > the two versions. CXF really doesn't do anything at this level. >>> > >>> > HOWEVER, can I see the annotations on the FOO object as well? Does it >>> > have >>> > an @XmlRootElement on it? How about an @XmlType annotation? Does the >>> > @XmlType have a name attribute? >>> > >>> > Dan >>> > >>> > On Thursday, January 26, 2012 12:16:13 PM rouble wrote: >>> > > CXF Gurus, >>> > > >>> > > I use JavaToWS to generate the WSDL on my development box. After >>> > >>> > migrating >>> > >>> > > to 2.4.3 (from 2.4.1) I noticed that the WSDL being generated is >>> > > slightly different (uses references). And any clients generated >>> > > using wsdl2java,> >>> > on >>> > >>> > > that WSDL do not work. This issue is easily reproducible. >>> > > >>> > > The data object in question is, lets say, a Widget, and the SOAP API >>> > > call is getWidget(). Here is what Widget looks like: >>> > > <code> >>> > > @XmlRootElement(name = "Widget") >>> > > @XmlAccessorType(XmlAccessType.PROPERTY) >>> > > @XmlType(name = "Widget") >>> > > public class Widget { >>> > > >>> > > private FOO foo; >>> > > private Bar bar; >>> > > >>> > > public FOO getFOO() { >>> > > >>> > > return foo; >>> > > >>> > > } >>> > > public void setFOO(FOO foo) { >>> > > >>> > > this.foo = foo; >>> > > >>> > > } >>> > > public Bar getBar() { >>> > > >>> > > return bar; >>> > > >>> > > } >>> > > public void setBar(Bar bar) { >>> > > >>> > > this.bar = bar; >>> > > >>> > > } >>> > > >>> > > } >>> > > </code> >>> > > >>> > > The WSDL generated by JavaToWS looks like this: >>> > > <wsdl> >>> > > <xs:complexType name="Widget"> >>> > > >>> > > <xs:sequence> >>> > > >>> > > <xs:element minOccurs="0" name="bar" >>> > > type="tns:Bar"/> >>> > > <xs:element minOccurs="0" ref="tns:FOO"/> >>> > > >>> > > </xs:sequence> >>> > > >>> > > </xs:complexType> >>> > > </wsdl> >>> > > >>> > > Notice how bar is explicitly listed inline, but FOO is referred to >>> > > via a reference. In CXF 2.4.1, both of these elements would be >>> > > explicitly> >>> > listed >>> > >>> > > inline. >>> > > >>> > > And the generated code using wsdl2java looks like this: >>> > > <code> >>> > > >>> > > @XmlAccessorType(XmlAccessType.FIELD) >>> > > @XmlType(name = "Widget", propOrder = { "bar", "foo" }) >>> > > public class Widget { >>> > > >>> > > protected Bar bar; >>> > > @XmlElement(name = "FOO", namespace = >>> > > "http://example.com/") >>> > > protected FOO foo; >>> > > >>> > > <SNIP> >>> > > >>> > > } >>> > > >>> > > </code> >>> > > >>> > > Notice, that FOO is explicitly marked to be in a namespace in the >>> > >>> > generated >>> > >>> > > code, and bar is in no explicit namespace. >>> > > >>> > > Now, when we call the getWidget() on the web service, we get back: >>> > > <soap:Envelope >>> > > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> >>> > > >>> > > <soap:Body> >>> > > >>> > > <ns2:getWidgetResponse >>> > > xmlns:ns2="http://example.com/"> >>> > > >>> > > <return> >>> > > >>> > > <bar> >>> > > >>> > > <intBar>7</intBar> >>> > > >>> > > </bar> >>> > > <FOO> >>> > > >>> > > <fooInt>99</fooInt> >>> > > >>> > > </FOO> >>> > > >>> > > </return> >>> > > >>> > > </ns2:getWidgetResponse> >>> > > >>> > > </soap:Body> >>> > > >>> > > </soap:Envelope> >>> > > >>> > > And CXF throws the exception: >>> > > org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging >>> > > WARNING: Interceptor for { >>> > > http://example.com/}FooWebService#{http://example.com/}getWidget has >>> > >>> > thrown >>> > >>> > > exception, unwinding now >>> > > org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected >>> > > element (uri:"", local:"FOO"). Expected elements are >>> > > <{http://example.com/}FOO>,<{}bar> >>> > > >>> > > >>> > > The CXF client is expecting FOO to be in the namespace >>> > >>> > http://example.com, >>> > >>> > > but JAXB does not namespace elements. Hence the exception. bar is >>> > > unmarshalled just fine. Now this worked fine in when we used >>> > > JavaToWS in 2.4.1 and is broke now. Any thoughts? Do I need to file >>> > > a bug? >>> > > >>> > > tia, >>> > > rouble >>> > >>> > -- >>> > Daniel Kulp >>> > [email protected] - http://dankulp.com/blog >>> > Talend Community Coder - http://coders.talend.com >> -- >> Daniel Kulp >> [email protected] - http://dankulp.com/blog >> Talend Community Coder - http://coders.talend.com
