6

Webサービスの実装を生成するために必要なWSDLがいくつかあります。私はEclipseとAxis1.4を使用しており、Weblogic9.2で実行しています。

サーバースタブの生成はうまくいき、必要なコードを実装しました。ただし、エミュレートしている既存の実装との互換性のために、特定のエラー条件に対してSOAPフォールトを返す必要があります。

つまり、次の例のように、応答のSOAP本体が必要です。

<soapenv:Body>
    <soapenv:Fault>
        <faultcode xmlns:ns1="foobar">ns1:1234</faultcode>
        <faultstring>The supplied parameter name ABCD is not recognised.</faultstring>
        <detail>
            <FaultDetail>An error processing the web service [MyService]: Unknown parameter:ABCD</FaultDetail>
            <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">planet</ns2:hostname>
        </detail>
    </soapenv:Fault>
</soapenv:Body>

(多くの)グーグルから、SOAPFaultExceptionをスローすることでこれを実行できるはずだと思います。ただし、メッセージスタブはjava.rmi.RemoteExceptionのみをスローするため、SOAPFaultExceptionをRemoteExceptionに渡してみました。それは私にこのようなものを与えます:

   <soapenv:Body>
      <soapenv:Fault>
         <faultcode>soapenv:Server.userException</faultcode>
         <faultstring>java.rmi.RemoteException: My remote exception; nested exception is: 
    javax.xml.rpc.soap.SOAPFaultException: soap fault string</faultstring>
         <detail>
            <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">myhostname</ns1:hostname>
         </detail>
      </soapenv:Fault>
   </soapenv:Body>

...つまり、SOAP障害は発生していません。

私は他の多くのものを試しました、そして私はかなり立ち往生しています。それで、誰かが私の環境で、指定できるコンテンツを含むSOAP障害応答を返す方法を(理想的には例を挙げて)教えてもらえますか?

私はAxisを使用することに慣れていません(しかし、私はそれについて何よりも経験があります)。別の方法を提案する場合は、Webサービスメソッドで別の(認証された)Webサービスを呼び出す必要があることに注意してください。これは、Axis1.4でしか機能しません...

4

1 に答える 1

3

2番目のコード投稿はSOAP障害です(soapenv:Fault内部に注意してくださいsoapenv:Body)。

基本的に、フレームワークのデフォルトの動作はすべて、標準のSOAP障害を返し、障害コード、障害文字列、および障害詳細フィールドに独自の情報を入力する機能を提供することです。

Axis 1の例外に関するドキュメントを参照してください:http ://ws.apache.org/axis/java/apiDocs/org/apache/axis/AxisFault.html

さまざまなフィールドのqnameを設定するためのコンストラクターがあるため、そこで独自の項目を参照できるはずです。

多くの人が障害詳細フィールドを使用し、DOMを使用してその中の独自のXMLタイプをシリアル化します。

最後になりましたが、Axis1の最盛期は2000年から2004年頃でしたが、その周辺で回答やサポートを得るのは難しいでしょう。ほとんどの人は、Axis1からApache CXFAxis2、または単に
JAX-WS(現在はJDK6 +に含まれています)に移行しています。Spring Web Servicesプロジェクトもあり、スタック内のすべての動作(マーシャリング、実行されるBeanなど)を完全にカスタマイズできます。

これらのフレームワークはすべて、WebサービスセキュリティにWSS4Jを使用しており、標準のユーザー名トークン、x509トークンなどをサポートできます。それでも、基本的なメッセージがやり取りされると、詳細を確認する必要があります。 WS-Securityの

于 2011-06-12T17:03:02.123 に答える