无法从WSDL创建JAX-WS服务

时间:2012-05-13 16:11:54

标签: java wsdl jax-ws

我有一个WSDL文档:

<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:tns="http://java.CAEServer"
             xmlns:server="http://caeserver.caebeans.org"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             targetNamespace="http://java.CAEServer"
             name="CAEInstanceImplService">

    <types>
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                    targetNamespace="http://caeserver.caebeans.org"
                    xmlns:test="http://example.org"
                    xmlns:wsa="http://www.w3.org/2005/08/addressing"
                    xmlns:serv="http://caeserver.caebeans.org"
                    attributeFormDefault="unqualified" elementFormDefault="qualified">

            <xsd:element name="data" type="xsd:string"/>

            <xsd:element name="parameter">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="text">
                            <xsd:complexType>
                                <xsd:attribute name="data" type="xsd:string"/>
                            </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="units">
                            <xsd:complexType>
                                <xsd:attribute name="data" type="xsd:string"/>
                            </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="comment">
                            <xsd:complexType>
                                <xsd:attribute name="data" type="xsd:string"/>
                            </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="enums" type="xsd:string"/>
                        <xsd:element name="default" type="xsd:int"/>
                        <xsd:element name="value" type="xsd:string"/>
                    </xsd:sequence>
                    <xsd:attribute name="name" type="xsd:string"/>
                    <xsd:attribute name="type" type="xsd:string"/>
                    <xsd:attribute name="visible" type="xsd:boolean"/>
                </xsd:complexType>
            </xsd:element>

            <xsd:complexType name="languageData">
                <xsd:simpleContent>
                    <xsd:extension base="xsd:string">
                        <xsd:attribute name="name" type="xsd:string"/>
                    </xsd:extension>
                </xsd:simpleContent>
            </xsd:complexType>

            <xsd:element name="language">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element maxOccurs="unbounded" name="data" type="serv:languageData"/>
                    </xsd:sequence>
                    <!--<xsd:attribute name="xml:lang" type="xsd:string"/>-->
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="instance_ID" type="xsd:string"/>

            <xsd:element name="problemCaebean">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="categories">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element name="category">
                                        <xsd:complexType>
                                            <xsd:sequence>
                                                <xsd:element maxOccurs="unbounded" ref="serv:parameter"/>
                                            </xsd:sequence>
                                            <xsd:attribute name="name" type="xsd:string"/>
                                            <xsd:attribute name="data" type="xsd:string"/>
                                        </xsd:complexType>
                                    </xsd:element>
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="resources">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element maxOccurs="unbounded" ref="serv:language"/>
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                    </xsd:sequence>
                    <xsd:attribute name="name" type="xsd:string"/>
                    <xsd:attribute name="author" type="xsd:string"/>
                    <xsd:attribute name="version" type="xsd:decimal"/>
                    <xsd:attribute name="caebeanId" type="xsd:string"/>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="caeProject">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element ref="serv:problemCaebean"/>
                        <xsd:element name="logical">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element maxOccurs="unbounded" name="node">
                                        <xsd:complexType>
                                            <xsd:attribute name="id" type="xsd:string"/>
                                            <xsd:attribute name="type" type="xsd:string"/>
                                            <xsd:attribute name="condition" type="xsd:string"/>
                                            <xsd:attribute name="execute" type="xsd:string"/>
                                            <xsd:attribute name="x" type="xsd:int"/>
                                            <xsd:attribute name="y" type="xsd:int"/>
                                        </xsd:complexType>
                                    </xsd:element>
                                    <xsd:element maxOccurs="unbounded" name="edge">
                                        <xsd:complexType>
                                            <xsd:attribute name="source" type="xsd:string"/>
                                            <xsd:attribute name="target" type="xsd:string"/>
                                            <xsd:attribute name="when" type="xsd:boolean"/>
                                        </xsd:complexType>
                                    </xsd:element>
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="physical">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element name="componentCaebean">
                                        <xsd:complexType>
                                            <xsd:sequence>
                                                <xsd:element maxOccurs="unbounded" name="input">
                                                    <xsd:complexType>
                                                        <xsd:attribute name="filename" type="xsd:string"/>
                                                    </xsd:complexType>
                                                </xsd:element>
                                                <xsd:element maxOccurs="unbounded" name="output">
                                                    <xsd:complexType>
                                                        <xsd:attribute name="filename" type="xsd:string"/>
                                                    </xsd:complexType>
                                                </xsd:element>
                                                <xsd:element name="jar-premode">
                                                    <xsd:complexType>
                                                        <xsd:attribute name="name" type="xsd:string"/>
                                                    </xsd:complexType>
                                                </xsd:element>
                                                <xsd:element name="exec">
                                                    <xsd:complexType>
                                                        <xsd:sequence>
                                                            <xsd:element name="param">
                                                                <xsd:complexType>
                                                                    <xsd:attribute name="name" type="xsd:string"/>
                                                                </xsd:complexType>
                                                            </xsd:element>
                                                        </xsd:sequence>
                                                        <xsd:attribute name="name" type="xsd:string"/>
                                                        <xsd:attribute name="appname" type="xsd:string"/>
                                                        <xsd:attribute name="appversion" type="xsd:decimal"/>
                                                    </xsd:complexType>
                                                </xsd:element>
                                            </xsd:sequence>
                                            <xsd:attribute name="name" type="xsd:string"/>
                                        </xsd:complexType>
                                    </xsd:element>
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                    </xsd:sequence>
                    <xsd:attribute name="name" type="xsd:string"/>
                    <xsd:attribute name="author" type="xsd:string"/>
                    <xsd:attribute name="version" type="xsd:decimal"/>
                    <xsd:attribute name="id" type="xsd:string"/>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="Status">
                <xsd:complexType>
                    <xsd:choice>
                        <xsd:element name="NOT_STARTED"/>
                        <xsd:element name="RUNNING"/>
                        <xsd:element name="HELD"/>
                        <xsd:element name="SUCCESSFULL"/>
                        <xsd:element name="FAILED"/>
                    </xsd:choice>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="CurrentTime">
                <xsd:complexType>
                    <xsd:simpleContent>
                        <xsd:extension base="xsd:dateTime">
                            <xsd:anyAttribute namespace="##other" processContents="lax"/>
                        </xsd:extension>
                    </xsd:simpleContent>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="TerminationTime" nillable="true">
                <xsd:complexType>
                    <xsd:simpleContent>
                        <xsd:extension base="xsd:dateTime">
                            <xsd:anyAttribute namespace="##other" processContents="lax"/>
                        </xsd:extension>
                    </xsd:simpleContent>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="Description">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element ref="serv:Status"/>
                        <xsd:element ref="serv:TerminationTime"/>
                        <xsd:element ref="serv:CurrentTime"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

            <!--
            message used to create a new instance WS-Resource
            -->
            <xsd:element name="createInstance">
                <xsd:complexType/>
            </xsd:element>

            <!--
               the response, simply contains an EPR to the new instance
            -->
            <xsd:element name="createInstanceResponse">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="instanceID" type="xsd:string"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="submitJob">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element ref="serv:instance_ID"/>
                        <xsd:element ref="serv:problemCaebean"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="submitJobResponse">
                <xsd:complexType>
                    <xsd:sequence>
                        <!--<xsd:element name="xml" type="xsd:string"/>-->
                        <xsd:element name="Result" type="xsd:int"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="getStatus">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="instance_ID" type="xsd:string"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="getStatusResponse">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element ref="serv:Status"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

        </xsd:schema>
    </types>

    <message name="SubmitJobRequest">
        <part name="parameter" element="server:submitJob"/>
    </message>

    <message name="SubmitJobResponse">
        <part name="parameter" element="server:submitJobResponse"/>
    </message>

    <message name="GetStatusRequest">
        <part name="parameter" element="server:getStatus"/>
    </message>

    <message name="GetStatusResponse">
        <part name="parameter" element="server:getStatusResponse"/>
    </message>

    <portType name="CAEInstance">
        <operation name="SubmitJob">
            <input message="tns:SubmitJobRequest"/>
            <output message="tns:SubmitJobResponse"/>
        </operation>
        <operation name="GetStatus">
            <input message="tns:GetStatusRequest"/>
            <output message="tns:GetStatusResponse"/>
        </operation>
    </portType>

    <binding name="CAEInstanceImplPortBinding" type="tns:CAEInstance">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <operation name="SubmitJob">
            <soap:operation soapAction="http://java.CAEServer/submitJob"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="GetStatus">
            <soap:operation soapAction="http://java.CAEServer/getStatus"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>

    <service name="CAEInstanceImplService">
        <port name="CAEInstanceImplPort" binding="tns:CAEInstanceImplPortBinding">
            <soap:address location="http://127.0.0.1:9000/caeinstance"/>
        </port>
    </service>
</definitions>

我正在使用命令

创建类型和服务定义
wsimport -keep -verbose ../src/main/resources/instance.wsdl

但是当我编译并运行我的项目并尝试从生成的WSDL编译客户端存根时,我遇到了错误

parsing WSDL...


[ERROR] undefined element declaration 'ns1:instance_ID'
  line 36 of http://localhost:9000/caeinstance?xsd=1

[ERROR] undefined element declaration 'ns1:Result'
  line 49 of http://localhost:9000/caeinstance?xsd=1

我的WSDL出了什么问题?

2 个答案:

答案 0 :(得分:1)

CXF和Eclipse都提供WSDL验证器。您应该通过其中一个运行WSDL并查看其内容。

答案 1 :(得分:0)

您是否创建了WSDL? 我认为您正在尝试使用一些未在WSDL中导出的数据类型。

wsdl引用一个名为's'的模式但是找不到它,因为它的URL是 XMLSchema但应该是 XMLSchema.xsd

你可以使用 wsimport -b http://www.w3.org/2001/XMLSchema.xsd usrtowsdl?WSDL