2011-07-26 4 views
2

私はspring-wsでDynamicWsdl11Definitionを使用して私のwsdl仕様を生成しています。最終的に、特定のwsdl/soap操作を特定のwsdlフォールトと自動的に関連付ける方法がわからないため、wsdl操作にwsdlフォールトを付けずに仕様を取得しています。どうやってやるの? wsdlフォールトをXSDスキーマのwsdl操作に関連付ける方法はありますか?ここでSpring-WS:自動wsdl障害の発生/関連付け

は私のXSDからの部分である:ここでは

<xs:element name="setContextRequest"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="usageContext" nillable="true" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="setContextResponse"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

は私の例外である:ここでは

<xs:element name="InvalidSessionException"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="InvalidSessionException" nillable="true" type="fault:InvalidSession"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

は、WSDLの仕様である:

 <wsdl:operation name="setContext"> 
      <soap:operation soapAction=""/> 
      <wsdl:input name="setContextRequest"> 
       <soap:body use="literal"/> 
      </wsdl:input> 
      <wsdl:output name="setContextResponse"> 
       <soap:body use="literal"/> 
      </wsdl:output> 
     </wsdl:operation> 

私の質問を関連付ける方法であります最終的にはその操作で失敗する:

 <wsdl:operation name="setContext"> 
      <soap:operation soapAction=""/> 
      <wsdl:input name="setContextRequest"> 
       <soap:body use="literal"/> 
      </wsdl:input> 
      <wsdl:output name="setContextResponse"> 
       <soap:body use="literal"/> 
      </wsdl:output> 
      <wsdl:fault name="invalidSession" type="InvalidSession"/> 
     </wsdl:operation> 

ありがとうございました。

ps:私はrequestSuffix、responseSuffix、faultSuffixを設定しています。したがって、wsdlフォルトメッセージも生成できます。

+0

障害は、WSDL契約の一部です。そして、私は個人的には契約に記載されている方が良いと思います。上記のサンプルメソッドを見つけてください。ありがとう! – Aleyna

+0

Springはコードを気にしません。マークをつけると、ここでそれを得ると何もしません。私はそれがwsdl操作のための方法と同じようにwsdlフォルトを生成するように、スキーマ自体を変更する必要があると思います。私は春がそれをサポートしているかどうか分からない。 – Aleyna

答えて

0

動的WSDL生成を使用してインライン・フォルトの生成を調べていません。

私はEndpointExceptionResolverを使用しました。 SOAP-FAULTメッセージが作成されます。

@Bean 
public EndpointExceptionResolver exceptionResolver() { 
    SoapFaultDefinition defaultFault = new SoapFaultDefinition(); 
    defaultFault.setFaultCode(SoapFaultDefinition.SERVER); 

    Properties mappings = new Properties(); 
    mappings.put("com.sun.xml.wss.impl.WssSoapFaultException", "CLIENT,Authentication failed"); 
    mappings.put("org.springframework.ws.soap.security.xwss.XwsSecurityValidationException", "CLIENT,Authentication failed"); 

    SoapFaultMappingExceptionResolver resolver = new SoapFaultMappingExceptionResolver(); 
    resolver.setDefaultFault(defaultFault); 
    resolver.setExceptionMappings(mappings); 

    return resolver; 
} 

この例外リゾルバは、インターセプタの1つに注入できます。

2

sws:dynamic-wsdlにfault要素を生成させる方法についての最初の質問には、fault要素が "Fault"で終わるという規則があります。したがって、 "MemberService" MemberRequest」、 『MemberResponse』と 『あなたのXSDのMemberFault』の要素と、これらは2番目の質問には春-WS

<wsdl:portType name="MemberDetails"> 
    <wsdl:operation name="MemberDetails"> 
    <wsdl:input message="tns:MemberDetailsRequest" name="MemberDetailsRequest"></wsdl:input> 
    <wsdl:output message="tns:MemberDetailsResponse" name="MemberDetailsResponse"></wsdl:output> 
    <wsdl:fault message="tns:MemberDetailsFault" name="MemberDetailsFault"></wsdl:fault> 
</wsdl:operation> 
</wsdl:portType> 

によって一緒に置かれます、どのように私は、春-WSは、この障害の要素を取り込むために取得します私の特定の型の例外を調べ、fault要素のタグをタグで設定するカスタムSoapFaultExceptionResolverを作成しました。少しハッキーでしたが、私は他の方法を見ませんでした。あなたが別のrequestSuffix responseSuffixとfaultSuffixと同じ名前インストールする必要があり

+0

Bijuありがとう。私はrequestSuffix、responseSuffixとfaultSuffixを設定しようとしましたが、それは何らかの理由で実行されませんでした。それから、私は例外に接尾辞の名前を変更しようとしました...失敗、まだ何も変わっていません。私はさらに調査し、皆さんにここで知ってもらうようにします。 – Aleyna

0

<xs:element name="setContextRequest"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="usageContext" nillable="true" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="setContextResponse"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="setContextException"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="InvalidSessionException" nillable="true" type="fault:InvalidSession"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
関連する問題