Dmytro Sylaiev created CXF-9102:
-----------------------------------
Summary: cxf-codegen-plugin fails to generate code from wsdl and
binding file after update to 4.x: XPath evaluation results in empty target node
Key: CXF-9102
URL: https://issues.apache.org/jira/browse/CXF-9102
Project: CXF
Issue Type: Bug
Affects Versions: 4.0.6, 4.1.0
Reporter: Dmytro Sylaiev
I have created a small sample project with pom.xml including cxf-codegen-plugin
in it, bindings.xml file, and HelloWorld.wsdl
pom.xml:
{code:java}
...
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/bindings.xml</bindingFile>
</bindingFiles>
<wsdl>${basedir}/src/main/resources/HelloWorld.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...{code}
HelloWorld.wsdl:
{noformat}
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.org/helloworld"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.org/helloworld"
name="HelloWorldService">
<types>
<xsd:schema targetNamespace="http://example.org/helloworld">
<xsd:element name="sayHello">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="sayHelloResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="greeting" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="sayHelloRequest">
<part name="parameters" element="tns:sayHello"/>
</message>
<message name="sayHelloResponse">
<part name="parameters" element="tns:sayHelloResponse"/>
</message>
<portType name="HelloWorld">
<operation name="sayHello">
<input message="tns:sayHelloRequest"/>
<output message="tns:sayHelloResponse"/>
</operation>
</portType>
<binding name="HelloWorldSOAPBinding" type="tns:HelloWorld">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction="sayHello"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="HelloWorldService">
<port name="HelloWorldPort" binding="tns:HelloWorldSOAPBinding">
<soap:address location="http://localhost:8080/helloWorld"/>
</port>
</service>
</definitions>
{noformat}
bindings.xml:
{noformat}
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
jaxb:version="3.0">
<jaxb:bindings node="wsdl:definitions/wsdl:portType[@name='HelloWorld']">
<jaxb:class name="CustomHelloWorld"/>
</jaxb:bindings>
</jaxb:bindings>{noformat}
{{The execute mvn clean generate-code build succeeded when cxf.version is 3.6.5
but when update to 4.x it fails with}}
{noformat}
[WARNING] Exception in thread "main" org.apache.cxf.tools.common.ToolException:
file:/C:/projects/testProject/cxfGenTest/src/main/resources/bindings.xml
[6,78]: XPath evaluation of
"wsdl:definitions/wsdl:portType[@name='HelloWorld']" results in empty target
node
[WARNING]
[WARNING] at
org.apache.cxf.tools.common.ToolErrorListener.throwToolException(ToolErrorListener.java:87)
[WARNING] at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:158)
[WARNING] at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:402)
[WARNING] at
org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:105)
[WARNING] at
org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
[WARNING] at
org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
[WARNING] at
org.apache.cxf.maven_plugin.wsdl2java.ForkOnceWSDL2Java.main(ForkOnceWSDL2Java.java:51)
[WARNING] Caused by: com.sun.istack.SAXParseException2; systemId:
file:/C:/projects/testProject/cxfGenTest/src/main/resources/bindings.xml;
lineNumber: 6; columnNumber: 78; XPath evaluation of
"wsdl:definitions/wsdl:portType[@name='HelloWorld']" results in empty target
node
[WARNING] at
com.sun.tools.xjc.reader.internalizer.Internalizer.reportError(Internalizer.java:564)
[WARNING] at
com.sun.tools.xjc.reader.internalizer.Internalizer.reportError(Internalizer.java:557)
[WARNING] at
com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:235)
[WARNING] at
com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:329)
[WARNING] at
com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:115)
[WARNING] at
com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:76)
[WARNING] at
com.sun.tools.xjc.reader.internalizer.DOMForest.transform(DOMForest.java:414)
[WARNING] at
com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:214)
[WARNING] at
com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:65)
[WARNING] at
org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:445)
[WARNING] at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:711)
[WARNING] at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:259)
[WARNING] at
org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:156)
[WARNING] ... 5 more
{noformat}
despite all configuration remains the same and corresponds the examples in the
docs: [https://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html]
It also works with cxf 4.x when I comment the
{noformat}
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/bindings.xml</bindingFile>
</bindingFiles>{noformat}
part in the plugin configuration.
I've debugged a bit and it seems that the XPath lookup for node
`wsdl:definitions/wsdl:portType[@name='HelloWorld']` is evaluated not through
HelloWorld.wsdl file, but through the bindings.xml itself.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)