2011-10-18 2 views
0

私は最初のSOAP Webサービスをコーディングしようとしています。SOAPのUnmarshall例外(contract-first Spring-WSで完了)

私はorg.springframework.oxm.UnmarshallingFailureExceptionにマップされた応答であるSOAP応答Unmarshallのエラー を取得しています。 私は、Castor(un)マーシャラを使うようにSpringを設定しました。 問題はもっと具体的な原因を見つける方法がわかりません。

public class SentenceRequest { 

public SentenceRequest() {} 

private List<String> words = new ArrayList<String>(); 

public List<String> getWords() { 
    return words; 
} 

public void setWords(List<String> words) { 
    this.words = words; 
} 


public class SentenceResponse { 

private String sentence; 

public SentenceResponse() {} 

public SentenceResponse(String sen) { 
    sentence = sen; 
} 

public String getSentence() { 
    return sentence; 
} 

public void setSentence(String sentence) { 
    this.sentence = sentence; 
} 

ヒマシマッピング:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapping PUBLIC 
    "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN" 
    "http://castor.exolab.org/mapping.dtd"> 
<mapping xmlns="http://castor.exolab.org/"> 
    <class name="ro.soapservice2.SentenceRequest"> 
     <map-to xml="SentenceRequest" ns-uri="sentence" ns-prefix="s" /> 
     <field name="words" collection="arraylist" type="java.util.List" required="true"> 
      <bind-xml name="word" node="element"></bind-xml> 
     </field> 
    </class> 

    <class name="ro.soapservice2.SentenceResponse"> 
     <map-to xml="SentenceResponse" ns-uri="sentence" ns-prefix="s" /> 
     <field name="sentence" type="java.lang.String" required="true"> 
      <bind-xml name="sentence" node="element" /> 
     </field> 
    </class> 
</mapping> 

(二つの入力XMLファイルに基づいてTrang.jarで生成)スキーマ:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"  targetNamespace="sentence" xmlns:s="sentence"> 
    <xs:element name="SentenceRequest"> 
    <xs:complexType> 
      <xs:sequence> 
     <xs:element maxOccurs="unbounded" ref="s:word"/> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 
    <xs:element name="word" type="xs:string"/> 
    <xs:element name="SentenceResponse"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="s:sentence"/> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="sentence" type="xs:string"/> 
</xs:schema> 

とWSDLスプリング生成:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:sch="sentence" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="sentence" targetNamespace="sentence"> 
    <wsdl:types> 
    <xs:schema xmlns:s="sentence" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="sentence"> 

    <xs:element name="SentenceRequest"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded" ref="s:word"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="word" type="xs:string"/> 

    <xs:element name="SentenceResponse"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="s:sentence"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="sentence" type="xs:string"/> 

</xs:schema> 
</wsdl:types> 

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

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

    <wsdl:portType name="Sentence"> 
    <wsdl:operation name="Sentence"> 
     <wsdl:input message="tns:SentenceRequest" name="SentenceRequest"> 
     </wsdl:input> 
     <wsdl:output message="tns:SentenceResponse" name="SentenceResponse"> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:portType> 

    <wsdl:binding name="SentenceSoap11" type="tns:Sentence"> 
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <wsdl:operation name="Sentence"> 
     <soap:operation soapAction=""/> 
     <wsdl:input name="SentenceRequest"> 
     <soap:body use="literal"/> 
     </wsdl:input> 
     <wsdl:output name="SentenceResponse"> 
     <soap:body use="literal"/> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 

    <wsdl:service name="SentenceService"> 
    <wsdl:port binding="tns:SentenceSoap11" name="SentenceSoap11"> 
     <soap:address location="http://localhost:8080/soapservice2/services"/> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

SOAPリクエストim ake:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sen="sentence"> 
<soapenv:Header/> 
<soapenv:Body> 
    <sen:SentenceRequest> 
     <!--1 or more repetitions:--> 
     <sen:word>asd</sen:word> 
    </sen:SentenceRequest> 
</soapenv:Body> 
</soapenv:Envelope> 
+0

<field name="words" collection="arraylist" type="java.util.List" required="true"> <bind-xml name="word" node="element"></bind-xml> </field> 

から変更

は、例外から完全なスタックトレースを与えてみてください。 –

答えて

0

解決済み! まず私は

org.springframework.ws.soap.server.endpoint.SoapFaultMappingExceptionResolver 

からSOAP応答にスローされた実際の例外をバック置く

org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver 

に私の例外リゾルバを置き換えます。 はその後、私はこの問題は、キャスターのXMLマッピングファイルにあった見た:サーバーに記録として

<field name="words" collection="arraylist" type="java.lang.String" required="true"> 
       <bind-xml name="word" node="element"></bind-xml> 
     </field> 
関連する問題