2015-02-24 34 views
3

嗨,大家我需要生成肥皂響應如下。我已經生成了「GetTestDetailResult」節點,但無法添加「國家」作爲根節點的子節點(GetTestDetailResponse)。無法添加兄弟節點到肥皂響應

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <GetTestDetailResponse> 
     <GetTestDetailResult> 
     <id>string</id> 
     <fname>string</fname> 
     <lname>string</lname> 
     </GetTestDetailResult> 
     <country>string</country> 
     <age>int</age> 
    </GetTestDetailResponse> 
    </soap:Body> 
</soap:Envelope> 

我的WSDL文件如下:

<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions name="TestServiceService" targetNamespace="http://www.test.org/" 
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
        xmlns:tns="http://www.test.org/" 
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> 
    <wsdl:types> 
     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        xmlns:tns="http://www.test.org/" 
        attributeFormDefault="unqualified" 
        elementFormDefault="unqualified" 
        targetNamespace="http://www.test.org/"> 

      <xs:element name="GetTestDetail" type="tns:GetTestDetail"/> 
      <xs:element name="GetTestDetailResponse" type="tns:GetTestDetailResponse"/> 

      <xs:complexType name="GetTestDetail"> 
       <xs:sequence> 
        <xs:element minOccurs="0" name="email" type="xs:string"/> 
       </xs:sequence> 
      </xs:complexType> 

      <xs:complexType name="GetTestDetailResponse"> 
       <xs:sequence> 
        <xs:element minOccurs="1" name="GetTestDetailResult" type="tns:GetTestDetailResult"/> 
       </xs:sequence> 
      </xs:complexType> 

      <xs:complexType name="GetTestDetailResult"> 
       <xs:sequence> 
        <xs:element minOccurs="0" name="id" type="xs:string"/> 
        <xs:element minOccurs="0" name="fname" type="xs:string"/> 
        <xs:element minOccurs="0" name="lname" type="xs:string"/> 
        <xs:element minOccurs="0" name="authFailed" type="xs:string"/> 
        <xs:element minOccurs="0" name="soapMessage" type="xs:string"/> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:schema> 
    </wsdl:types> 

    <wsdl:message name="GetTestDetail"> 
     <wsdl:part name="parameters" element="tns:GetTestDetail"/> 
    </wsdl:message> 

    <wsdl:message name="GetTestDetailResponse"> 
     <wsdl:part name="parameters" element="tns:GetTestDetailResponse"/> 
    </wsdl:message> 


    <wsdl:portType name="TestServiceWsdlEndpointPortType"> 
     <wsdl:operation name="GetTestDetail"> 
      <wsdl:input name="GetTestDetail" message="tns:GetTestDetail"/> 
      <wsdl:output name="GetTestDetailResponse" message="tns:GetTestDetailResponse"/> 
     </wsdl:operation> 
    </wsdl:portType> 

    <wsdl:binding name="TestServiceWsdlEndpointBinding" type="tns:TestServiceWsdlEndpointPortType"> 
     <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 

     <wsdl:operation name="GetTestDetail"> 
      <soap:operation soapAction="" style="document"/> 
      <wsdl:input name="GetTestDetail"> 
       <soap:body use="literal"/> 
      </wsdl:input> 
      <wsdl:output name="getTestDetailResponse"> 
       <soap:body use="literal"/> 
      </wsdl:output> 
     </wsdl:operation> 
    </wsdl:binding> 

    <wsdl:service name="TestServiceWsdlEndpoint"> 
     <wsdl:port name="TestServiceWsdlPort" binding="tns:TestServiceWsdlEndpointBinding"> 
      <soap:address location="http://localhost:8080/test/services/TestServiceWsdl"/> 
     </wsdl:port> 
    </wsdl:service> 

</wsdl:definitions> 

我響應Java類是: -

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "testDetail", propOrder = { 
     "id", 
     "fname", 
     "lname" 

}) 

public class TestDetail { 

    protected String id; 
    protected String fname; 
    protected String lname; 

    protected String authFailed; 
    protected String soapMessage; 


    public String getId() { 
     return id; 
    } 

    public void setId(String value) { 
     this.id = value; 
    } 

    public String getFname() { 
     return fname; 
    } 

    public void setFname(String value) { 
     this.fname = value; 
    } 

    public String getLname() { 
     return lname; 
    } 

    public void setLname(String value) { 
     this.lname = value; 
    } 

    public String getAuthFailed() { 
     return authFailed; 
    } 

    public void setAuthFailed(String value) { 
     this.authFailed = value; 
    } 

    public String getSoapMessage() { 
     return soapMessage; 
    } 

    public void setSoapMessage(String value) { 
     this.soapMessage = value; 
    } 

} 
+0

你能發佈你的錯誤消息嗎? – unekwu 2015-02-25 21:23:42

回答

2

我不能發表評論,但(沒有足夠的代表)澄清,但是當你說你不能添加country作爲GetTestDetailResponse的子元素我假設你得到一個XML無效錯誤。

望着在WSDL XML模式沒有country元素定義

<xs:element name="GetTestDetailResponse" type="tns:GetTestDetailResponse"/> 

因此改變類型這樣的事情應該工作:

<xs:complexType name="GetTestDetailResponse"> 
    <xs:sequence> 
     <xs:element minOccurs="1" name="GetTestDetailResult" type="tns:GetTestDetailResult"/> 
     <xs:element minOccurs="0" name="country" type="xs:string"/> 
     <xs:element minOccurs="0" name="age" type="xs:integer"/> 
    </xs:sequence> 
    </xs:complexType> 

我還添加了年齡,作爲會有類似的問題。

+0

邁克,當我嘗試添加以下行應用程序不會出現。 2015-02-25 17:46:36

+0

@ sumit-verma當你說「沒有出現」 - 你會得到一個特定的錯誤?你是否也將註釋添加到Java類中? – 2015-02-25 18:45:52

+0

消息:使用名稱'testServiceWsdlEndpointBean'創建bean時出錯:bean的實例化失敗;嵌套異常是org.springframework.beans.factory.BeanDefinitionStoreException:工廠方法[public org.apache.cxf.endpoint.Server org.apache.cxf.jaxws.JaxWsServerFactoryBean.create()]拋出ex ception;嵌套異常是java.lang.NullPointerException – 2015-02-26 13:47:51