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)

Reply via email to