> I called
>
> wsdl2java.bat 'http://myappurl:/soap?wsdl'
If you grab that WSDL, what does the schema in there say? Does that say
elementFormDefault="unqualified"?
That's the import thing to make sure we get correct or the client is likely
not going to work.
You can TRY adding -xjc-npa to the wsdl2java command to see what it will then
generate. That should result in targetNamespace="" attributes on things all
over the place.
Dan
On Monday, December 12, 2011 10:47:51 AM Miguel Martins Feitosa Filho wrote:
> Hello All CXF Users,
>
> I am using a standard setup
> cxf-2.5
> jdk1.7.0_01
>
> My SEI exposes REST (XML and JSON outputs) and SOAP.
>
> For SOAP:
> I am trying to use UNQUALIFIED for elementFormDefault and
> attributeFormDefault.
>
> For REST I just drop the namespace.
>
> So package-info.java looks like:
>
> @javax.xml.bind.annotation.XmlSchema( namespace=MyApp.NS,
>
> elementFormDefault =
> javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED, attributeFormDefault =
> javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED,
>
xmlns={@javax.xml.bind.annotation.XmlNs(prefix =
> MyApp.NS_QUALIFIER , namespaceURI=MyApp.NS)}
> )
> import com.mycompany.MyApp;
>
> package com.mycompany;
>
> This generates UNQUALIFIED SOAP xml of the form:
> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
> <soap:Body>
> <MyApp:methodResponse xmlns:MyApp="http://mycompany.myapp.com/">
> <methodResponseDataList>
> <methodResponseData>
> <appName>Email</appName>
> <appRole>UPMC Email User</appRole>
> </methodResponseData>
> </methodResponseDataList>
> </MyApp:methodResponse>
> </soap:Body>
> </soap:Envelope>
>
>
> To further test the use of my application
>
> I called
>
> wsdl2java.bat 'http://myappurl:/soap?wsdl'
>
> As soon as this is working I will then call wadl2java ... :)
>
> This generated a very cool client that really makes it easy to use the
> application.
>
> Using a different IDE than I use to write my server I tried to test the
> client.
>
> When I call "method" using this client I get the following output:
>
> creating Client
>
> Dec 12, 2011 9:00:12 AM
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean
> buildServiceFromWSDL
> INFO: Creating Service
> {http://www.springframework.org/schema/beans}MyApp from WSDL:
> http://localhost:8080/MyApp/soap?wsdl
>
> Dec 12, 2011 9:00:16 AM org.apache.cxf.phase.PhaseInterceptorChain
> doDefaultLogging
> WARNING: Interceptor for
> {http://www.springframework.org/schema/beans}MyApp#{http://mynamespace/}meth
> od has thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected
> element (uri:"", local:"methodResponseData"). Expected elements are
> <{http://mynamespace/}methodResponseData>
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:8
> 24) at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:6
> 44) at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:156)
>
>
> After tweaking this problem I added on the CLIENT to the
> package-info.java generated by wsdl2java for the client the following
> 2 lines:
> @javax.xml.bind.annotation.XmlSchema( namespace = "http://mynamepace",
> elementFormDefault =
> javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED, //Added this line
> attributeFormDefault =
> javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED //Added this line
> )
>
> This had no effect.
>
> Who reads elementFormDefault? CXF or JAXB?
>
> I could change elementFormDefault and attributeFormDefault in the
> server back to QUALIFIED but that makes the xml much less readable and
> also avoids a problem that my warrant solving.
> I still find that the xml should output a xmlns="http://mynamespace"
> If this attribute is not present in a XML what does XML consider an
> unqualified xml tag's namespace to be?
> To get this output I tried adding namespace=MyApp.NS to my @XmlType or
> @XmlRootElement but still does not change the result.
>
> I also considered that the fact that my response is
> List<methodResponseData> instead of a wrapper class
> such as
> class ListOfResponseData {
> public List<methodResponseData> getItem();
> }
>
> could be the source of the issue, but again when calling a method that
> returns only a single methodResponseData and not a List, I also get
> the same unmarshalling error. So @XMLElement Wrapper on the SEI is not
> related to the issue.
>
> My SEI has annotations of the form:
> @GET
> @Path(" thepath ")
> @WebResult(name = "methodResponseData"")
> @XmlElementWrapper(name = "ListOfMethodResponseData")
> public MethodResponseData" method() throws MyAppException;
>
>
>
> In about two weeks I can return to this problem and debug further but
> some pointers would be great on this issue and it might have a quick
> fix.
>
> Questions:
> Can I use wsdl2java and still use the UNQUALIFIED annotation in
> package-info.java?
> Should the xml contain an attribute specifying the unqualified
> namespace xmlns="http://mynamespace" somewhere. If so how can I get
> that into the output?
>
> The ability to expose to users a client jar that can be used without
> prior knowledge of XML/Transports/Protocols straightforward java code
> is a great plus even at the cost of creating a dependency on the
> CXF-2.5 runtime for their project. The more sophisticated WebService
> users will call his wsdl2java or svcutil (.net users) or other wsdl
> consumer and some may simply parse the xml/json using standard parsers
> while still others will write code to read the xml directly. This of
> course depending on their needs and level of sophistication with
> WebServices.
>
> Thanks!
>
> Miguel
--
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com