java - 从 xml 模式创建 java 类

标签 java xml soap wsdl

重点是制作一个简单的白页 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 类(为两者),但我不知道如何继续...任何建议或提示将不胜感激..

提前致谢

最佳答案

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

  • 文件 -> 新建 -> 其他 -> 从模式创建 JaxB 类。
  • 您必须为生成的输出提供目标包
  • 如果您需要任何定制,您可能需要提供绑定(bind)文件
  • 这是有关 eclipse 发行版的详细信息:

Eclipse Java EE IDE for Web Developers.

Version: Juno Service Release 1 Build id: 20120920-0800>

(c) Copyright Eclipse contributors and others 2005, 2012. All rights reserved. Visit 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>

关于java - 从 xml 模式创建 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26065326/

相关文章:

java - 加载类

java - 为什么在 PageParameters 类型上使用 containsKey() 和 getString() 时出现错误?

Java SAX 解析器验证

c# - 如何从 C# 中的 wsdl SOAP 请求信封

java - 为什么java抽象类中需要Protected构造函数

java - JPA如何通过只读取外键值来建立JoinTable关系

java - spring 中的 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException

c# - XmlNodeConverter 只能转换以对象开头的JSON

java - 使用 XPath 和 XML XPath Api 获取 Soap Body

java - 使 Android 应用程序在一个 session 中连接