【问题标题】:Create java classes from an xml schema从 xml 模式创建 java 类
【发布时间】:2014-11-21 19:19:30
【问题描述】:

重点是创建一个简单的白页 Web 服务,它使用 SOAP 将一个人添加到电话簿(称为 addPerson() )。如果电话中已经有姓名相同的人 书,应该返回一个故障信息。

我制作了以下 wsdl 文件

 <?xml version="1.0" encoding="UTF-8"?>
<definitions name="whitepages" targetNamespace="http://whitepages.ws"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://whitepages.ws" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
    <types>
        <xsd:schema targetNamespace="http://whitepages.ws" xmlns:tns="http://whitepages.ws">
            <xsd:complexType name="personType">
                <xsd:sequence>
                    <xsd:element name="address" type="tns:addressType"></xsd:element>
                </xsd:sequence>
                <xsd:attribute name="firstName" type="xsd:string"/>
                <xsd:attribute name="lastName" type="xsd:string"/>
                <xsd:attribute name="phone" type="xsd:string"/>
            </xsd:complexType>
            <xsd:complexType name="addressType">
                <xsd:sequence>
                    <xsd:element name="street">
                        <xsd:complexType>
                            <xsd:sequence/>
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="postcode">
                        <xsd:complexType>
                            <xsd:sequence/>
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="city">
                        <xsd:complexType>
                            <xsd:sequence/>
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:element name="person" type="tns:personType"></xsd:element>
            <xsd:element name="response" type="xsd:string"></xsd:element>
            <xsd:complexType name="faultType">
                <xsd:sequence>
                    <xsd:element name="errorMessage" type="xsd:string"></xsd:element>
                    <xsd:element name="person" type="tns:personType"></xsd:element>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:element name="fault" type="tns:faultType"></xsd:element>
        </xsd:schema>
    </types>
    <message name="whitepagesOperationRequest">
        <part name="person" element="tns:person"/>
    </message>
    <message name="whitepagesOperationResponse">
        <part name="response" element="tns:response"/>
    </message>
    <message name="WPFault">
        <part name="errorMessage" type="xsd:string"/>
        <part name="person" element="tns:person"/>
    </message>
    <portType name="whitepages">
        <operation name="addPerson">
            <input name="input1" message="tns:whitepagesOperationRequest"/>
            <output name="output1" message="tns:whitepagesOperationResponse"/>
            <fault name="fault1" message="tns:WPFault"/>
        </operation>
    </portType>
    <binding name="whitepagesBinding" type="tns:whitepages">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="addPerson">
            <soap:operation style="document"/>
            <input name="input1">
                <soap:body use="literal"/>
            </input>
            <output name="output1">
                <soap:body use="literal"/>
            </output>
            <fault name="fault1">
                <soap:fault name="fault1" use="literal"/>
            </fault>
        </operation>
    </binding>
    <service name="whitepagesService">
        <port name="whitepagesBindingPort" binding="tns:whitepagesBinding">
            <soap:address location="http://localhost:${HttpDefaultPort}/service"/>
        </port>
    </service>
</definitions>

我验证了 xml,现在我需要为该架构创建 java 类(两者都适用),但我不知道如何继续...任何建议或提示将不胜感激..

提前致谢

【问题讨论】:

  • 最好的起点是查看 JAXB 规范(或参考实现 jaxb.java.net

标签: java xml soap wsdl


【解决方案1】:

我使用的 Eclipse 发行版有一个从模式创建 JAXB 类的向导:

  • 文件 -> 新建 -> 其他 -> 从架构创建 JaxB 类。
  • 您必须为生成的输出提供目标包
  • 如果您需要任何自定义,您可能需要提供绑定文件
  • 这是 Eclipse 发行版的详细信息:

面向 Web 开发人员的 Eclipse Java EE IDE。

版本:Juno Service Release 1 版本号:20120920-0800>

(c) 版权所有 Eclipse 贡献者和其他人 2005、2012。保留所有权利。 访问http://www.eclipse.org/webtools

另一个选项是使用XJC 编译器从模式生成类。它包含在标准 JDK 中。

在任何情况下,您都必须将架构定义提取到 XSD 文件并从您的 WSDL 中引用它:

    <schema xmlns="http://www.w3.org/2001/XMLSchema">
        <import namespace="http://whitepages.ws" schemaLocation="NAME_OF_Your_XSD_FILE.xsd" />             
    </schema>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多