Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XJC将WSDL转换为POJO的Ant任务给出了一个错误包名称_Ant_Wsdl_Xjc_Jdk1.7 - Fatal编程技术网

使用XJC将WSDL转换为POJO的Ant任务给出了一个错误包名称

使用XJC将WSDL转换为POJO的Ant任务给出了一个错误包名称,ant,wsdl,xjc,jdk1.7,Ant,Wsdl,Xjc,Jdk1.7,我有一个接受wsdl文件的Ant任务,它应该自动生成POJO(客户端Java),这样我就可以开始编写客户端JAX-WSWeb服务了 但是,我收到一个错误“[错误]用于此架构的包名…不是有效的包名” 此错误仅在wsdl文件中包含多个模式导入时发生,例如 <xsd:import namespace="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Response" schemaLocation="Pr

我有一个接受wsdl文件的Ant任务,它应该自动生成POJO(客户端Java),这样我就可以开始编写客户端JAX-WSWeb服务了

但是,我收到一个错误“[错误]用于此架构的包名…不是有效的包名”

此错误仅在wsdl文件中包含多个模式导入时发生,例如

            <xsd:import namespace="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Response" schemaLocation="ProcessCustomerInquiryResponse.xsd"/>
            <xsd:import namespace="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Request" schemaLocation="ProcessCustomerInquiryRequest.xsd"/>
        </xsd:schema>

下面是整个wsdl

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:CMSLINK="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry" xmlns:REQ="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Request" xmlns:RESP="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Response" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry" name="ProcessCustomerInquiryService">
    <wsdl:types>
        <xsd:schema>
            <xsd:import namespace="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Response" schemaLocation="ProcessCustomerInquiryResponse.xsd"/>
            <xsd:import namespace="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Request" schemaLocation="ProcessCustomerInquiryRequest.xsd"/>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="ProcessCustomerInquiryRequest">
        <wsdl:part name="requestData" element="REQ:ProcessCustomerInquiryRequest"/>
    </wsdl:message>
    <wsdl:message name="ProcessCustomerInquiryResponse">
        <wsdl:part name="responseData" element="RESP:ProcessCustomerInquiryResponse"/>
    </wsdl:message>
    <wsdl:portType name="ESB_ProcessCustomerInquiryService">
        <wsdl:operation name="ReqResp">
            <wsdl:input name="processRequest" message="CMSLINK:ProcessCustomerInquiryRequest"/>
            <wsdl:output name="processResponse" message="CMSLINK:ProcessCustomerInquiryResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="ProcessCustomerInquiryServiceSoapBinding" type="CMSLINK:ESB_ProcessCustomerInquiryService">
        <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="ReqResp">
            <wsdlsoap:operation soapAction="process"/>
            <wsdl:input>
                <wsdlsoap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <wsdlsoap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="ProcessCustomerInquiryService">
        <wsdl:port name="ProcessCustomerInquiry" binding="CMSLINK:ProcessCustomerInquiryServiceSoapBinding">
            <wsdlsoap:address location="http://tsesbd01.tms.toyota.com:51180/v2/MF_CMSLINK_ProcessCustomerInquiryDistributed.msgflow"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>


XJC Ant任务

<project name="WSDLCompile" default="wsdl2java" basedir=".">
    <target name="wsdl2java" description="Run xjc -wsdl.">
        <!-- properties -->
        <property name="sourceDir" value="temp/src" />
        <echo message="sourceDir:"/>
        <echo message="${sourceDir}"/>
        <mkdir dir="temp/classes"/>
        <property name="outputDir" value="temp/classes" />
        <echo message="outputDir:"/>
        <echo message="${outputDir}"/>
        <!-- xjc properties -->
        <property name="wsdl.url" value="src/wsdl/cmslink/ProcessCustomerInquiry.wsdl" />
        <echo message="wsdl.url:"/>
        <echo message="${wsdl.url}"/>
        <property name="wsdl.mapping.package.response" value="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Response=com.tms.cmslink.rts.service.ProcessCustomerInquiry.Response" />
        <echo message="wsdl.mapping.package.response:"/>
        <property name="wsdl.mapping.package.request" value="http://service.rts.cmslink.tms.com/ProcessCustomerInquiry/Request=com.tms.cmslink.rts.service.ProcessCustomerInquiry.Request" />
        <echo message="wsdl.mapping.package.request:"/>
        <!--C:/Program Files/Java/jdk1.7.0_09/bin/xjc -->
        <!--xjc execution-->
        <exec executable="xjc">
            <arg value="-wsdl" />
            <arg value="${wsdl.url}" />
            <arg value="-d" />
            <arg value="${outputDir}" />
            <arg value="-p"/>
            <arg value="${wsdl.mapping.package.request}"/>
            <arg value="-p"/>
            <arg value="${wsdl.mapping.package.response}"/>
            <arg value="-verbose"/>
        </exec>
    </target>
</project>

如果我删除额外的模式导入response.xsd或request.xsd,并且只包含ANT任务的1“-p”包名称空间参数,那么ANT将正常运行,但是我的wsdl文件包含多个模式导入

编辑

我改变了“-p”参数的值以遵守包约定,尽管我以前的方法是基于JXC bug论坛的

<project name="WSDLCompile" default="wsdl2java" basedir=".">
    <target name="wsdl2java" description="Run xjc -wsdl.">
        <!-- properties -->
        <property name="sourceDir" value="temp/src" />
        <echo message="sourceDir:"/>
        <echo message="${sourceDir}"/>
        <mkdir dir="temp/classes"/>
        <property name="outputDir" value="temp/classes" />
        <echo message="outputDir:"/>
        <echo message="${outputDir}"/>
        <!-- xjc properties -->
        <property name="wsdl.url" value="src/wsdl/cmslink/ProcessCustomerInquiry.wsdl" />
        <echo message="wsdl.url:"/>
        <echo message="${wsdl.url}"/>
        <property name="wsdl.mapping.package.response" value="com.tms.cmslink.rts.service.ProcessCustomerInquiry.Response" />
        <echo message="wsdl.mapping.package.response:"/>
        <property name="wsdl.mapping.package.request" value="com.tms.cmslink.rts.service.ProcessCustomerInquiry.Request" />
        <echo message="wsdl.mapping.package.request:"/>
        <!--C:/Program Files/Java/jdk1.7.0_09/bin/xjc -->
        <!--xjc execution-->
        <exec executable="xjc">
            <arg value="-wsdl" />
            <arg value="${wsdl.url}" />
            <arg value="-d" />
            <arg value="${outputDir}" />
            <arg value="-p"/>
            <arg value="${wsdl.mapping.package.request}"/>
            <arg value="-p"/>
            <arg value="${wsdl.mapping.package.response}"/>
            <arg value="-verbose"/>
        </exec>
    </target>
</project>

我甚至尝试过上面的ant任务,但没有成功

-p <arg value="${wsdl.mapping.package.request }"/>
<arg value="${wsdl.mapping.package.response}"/>
-p

通过将两个包名放在一行中,用空格分隔,这是根据JXC文档的解释,说明您可以有“零个或多个用空格分隔的包名称空间”。我要求XJC能够处理多个模式导入。

我认为问题在于您的Ant脚本。有两个问题:

  • package属性的值必须是java包。例如:
  • 您应该只指定一个包,而不是两个包
  • 祝你好运

    此外,这里还有一个链接,用于


    -Muel

    选项
    -p
    指定一个单独的Java包,该包应用于所有生成的类,而不考虑名称空间。如果希望每个名称空间URI映射到自己的包,则不能使用
    -p
    ,而是需要使用绑定自定义文件

    <bindings xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.1">
      <bindings schemaLocation="ProcessCustomerInquiryResponse.xsd" node="/xs:schema">
        <schemaBindings>
          <package name="com.example.inquiry.response"/>
        </schemaBindings>
      </bindings>
      <bindings schemaLocation="ProcessCustomerInquiryRequest.xsd" node="/xs:schema">
        <schemaBindings>
          <package name="com.example.inquiry.request"/>
        </schemaBindings>
      </bindings>
    </bindings>
    

    请指定如何将此绑定自定义传递给我的ANT任务,语法是什么???感谢Hanks,我尝试了它的工作原理,但是我使用了Apache CFX实现,CFX中不需要自定义绑定文件,它自动处理wsdl中的多个模式导入,再次感谢:)
    <arg value="-b"/>
    <arg file="bindings.xjb"/>