从xsd和wsdl

时间:2019-07-07 10:14:00

标签: maven xsd wsdl jax-ws wsdl2java

我正在通过使用一个wsdl和多个xsd文件来创建一个肥皂服务。 xsd文件包含在我的wsdl中。我已经尝试过使用maven与jaxws和cxf插件。这两个插件在解析wsdl时都抛出错误/异常。

以下是来自jaxws的错误:

[错误]无效的wsdl:operation“ insertSubscriber”:其文档操作,消息部分必须引用架构元素声明

CXF死了,没有抛出任何错误描述。

jxc框架从xsd文件创建类,但是它们没有用,因为我必须手动创建端点并且类的链接已经在我的wsdl中定义。

我也有C ++ gsoap客户端,它使用相同的wsdl和xsds来创建我的soap服务,但是我想将我的服务迁移到Java应用程序。如何解决以上问题?

wsdl片段:

<wsdl:import namespace="MyDomain/mytypes" location="MyTypes1.xsd"/>
<xsd:complexType name="insertSubscriberRequest">
    <xsd:sequence>
        <xsd:element name="insertAddressList" type="mytypes:InsertAddressList"/>
    </xsd:sequence>
</xsd:complexType>
<wsdl:message name="insertSubscriberRequest">
    <wsdl:part name="insertSubscriberRequest" type="tns:insertSubscriberRequest"/>
</wsdl:message>
<!--wsdl operation-->
<wsdl:portType name="myService">
    <wsdl:operation name="insertSubscriber">
        <wsdl:input message="tns:insertSubscriberRequest"/>
        <wsdl:output message="tns:insertSubscriberResponse"/>
    </wsdl:operation>
</wsdl:portType>
<!--soap operation-->
<wsdl:operation name="insertSubscriber">
    <soap:operation soapAction="MyDomain/mytypes/insertSubscriber"/>
    <wsdl:input>
        <soap:body use="literal" namespace="MyDomain/mytypes"/>
    </wsdl:input>
    <wsdl:output>
        <soap:body use="literal" namespace="MyDomain/mytypes"/>
    </wsdl:output>
</wsdl:operation>
MyTypes1.xsd中的

片段:

<xs:complexType name="InsertAddressList">
    <xs:annotation>
        <xs:documentation>Definition of a list of Account IDs for Insert operation</xs:documentation>
    </xs:annotation>
    <xs:sequence>
        <xs:element name="accountId" type="MyType2:sdsAccountId" minOccurs="10" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>
MyTypes2.xsd中的

片段

<xs:simpleType name="sdsAccountId">
    <xs:annotation>
        <xs:documentation>Definition of Account ID parameter</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
        <xs:minLength value="1"/>
        <xs:maxLength value="26"/>
        <xs:pattern value="([0..9]){1,26}"/>
    </xs:restriction>
</xs:simpleType>

1 个答案:

答案 0 :(得分:0)

我验证了WSDL文件,并且导入错误。实际上,它两次在wsdl:definitions和两次在xsd:schema中导入xsds。从wsdl:definitions删除导入对我有用,

使用wsimport时,我面临着同样的问题,但是它正在使用cxf。