Hi,
I've got a problem trying to generate a Java webservice out of a WSDL file I
got from a 3rd party. It boils down to these test-case:
test.wsdl:
<?xml version="1.0"?>
<definitions name="StockQuote"
targetNamespace="http://example.com/stockquote.wsdl"
xmlns:tns="http://example.com/stockquote.wsdl"
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsd1="http://example.com/stockquote.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
</types>
<message name="GetLastTradePriceInput">
<part name="body" type="xsd:string"/>
</message>
<message name="GetLastTradePriceOutput">
<part name="body" type="xsd:string"/>
</message>
<portType name="StockQuotePortType">
<operation name="GetLastTradePrice">
<input message="tns:GetLastTradePriceInput"/>
<output message="tns:GetLastTradePriceOutput"/>
</operation>
</portType>
<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetLastTradePrice">
<soap:operation soapAction="http://example.com/GetLastTradePrice"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="StockQuoteService">
<documentation>My first service</documentation>
<port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
<soap:address location="http://example.com/stockquote"/>
</port>
</service>
</definitions>
jaxb_bindings.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:ext="http://xml.w-wins.com/xjc-plugins/interfaces"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:globalBindings generateElementProperty="false"
choiceContentProperty="true" typesafeEnumMaxMembers="1500">
</jaxb:globalBindings>
</jaxb:bindings>
Now, when I run wsdl2java like this:
​mbickel@neptun ~ $ apache-cxf-2.7.17/bin/wsdl2java -b ./jaxb_bindings.xml -d
/tmp -compile -autoNameResolution -frontend jaxws21 ./test.wsdl
I get this output:
Exception in thread "main" java.lang.AssertionError
at
com.sun.tools.xjc.reader.internalizer.DOMForest.getOneDocument(DOMForest.java:230)
at
com.sun.tools.xjc.reader.internalizer.Internalizer.move(Internalizer.java:431)
at
com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:160)
at
com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:109)
at com.sun.tools.xjc.reader.internalizer.DOMForest.transform(DOMForest.java:449)
at
com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:231)
at
com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:95)
at
org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:462)
at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:714)
at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:270)
at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164)
at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412)
at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:184)
Which apparently is caused by DOMForest not including the empty <types></types>
definition, so the Internalizer doesn't have anyplace to move the global
bindings.
I can work-around this by not providing a jaxb:globalBindings or providing a
(useless) type definition in the wsdl.
Now the question is: is this something CXF can work-around for me or even a bug
that can be fixed?
Thanks, Matti
This e-mail message and all attachments transmitted with it may contain
privileged and/or confidential information intended solely for the use of the
addressee(s). If the reader of this message is not the intended recipient, you
are hereby notified that any reading, dissemination, distribution, copying,
forwarding or other use of this message or its attachments is strictly
prohibited. If you have received this message in error, please notify the
sender immediately and delete this message, all attachments and all copies and
backups thereof.