0

メソッドの同じ実装を呼び出すことができるようにするには、同じSOAPリクエストを使用する必要がありますが、これは2つの異なるサービスエンドポイントによって公開されます。

  1. エンドポイントA-SOAPを介した同期アクセス用
  2. エンドポイントB-JMSを介した非同期アクセス用

ここで確認しているのは、JMSで機能するSOAP要求メッセージとSOAPWebサービスエンドポイントが構造的に異なることです。

ApacheCXFを使用して、同じSOAPリクエストを使用してSOAPまたはJMSエンドポイントを呼び出すことができるかどうかを知りたいですか?

私の場合、両方のエンドポイントを呼び出すことができましたが、使用されるリクエストはそれぞれで同じではありません

以下は、非同期エンドポイントBでは機能するが同期エンドポイントAでは機能しないSOAPメッセージの例です。JUnitテストを実行して非同期メッセージを取得し、ActiveMQキューで生成メッセージをインターセプトしたことに注意してください。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<soap:Body>
    <ns1:create xmlns:ns1="http://service.ws.example/">
        <CustomPartyModel>
            <ns2:customerModel
                xmlns:ns2="http://party.beans.commons.example">
                <ns2:person>
                    <ns2:budgetPlanNumber>131484</ns2:budgetPlanNumber>
                    <ns2:clientSituationCode
                        xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance" ns3:nil="true" />
                    <ns2:employeeReduction>J</ns2:employeeReduction>
                    <ns2:employeeNumber></ns2:employeeNumber>
                    <ns2:packageNumber>5</ns2:packageNumber>
                    <ns2:planIndicator xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance"
                        ns3:nil="true" />
                    <ns2:privateRelationNumber
                        xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance" ns3:nil="true" />
                </ns2:person>
            </ns2:customerModel>

        </CustomPartyModel>
    </ns1:create>
</soap:Body>

これは、同期エンドポイントでは機能するが非同期エンドポイントでは機能しないSOAPリクエストです。このリクエストは、WSDLからリクエストを作成することで取得されました。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.example/" xmlns:par="http://party.beans.commons.example">
 <soapenv:Body>
  <ser:CustomPartyModel>
    <par:customerModel>

        <par:person>

           <par:budgetPlanNumber>131484</par:budgetPlanNumber>

           <par:employeeReduction>J</par:employeeReduction>

           <par:employeeNumber></par:employeeNumber>

        <par:packageNumber>5</par:packageNumber>


           <par:professionCodePartner></par:professionCodePartner>

           <par:professionDescriptionPartner></par:professionDescriptionPartner>

        </par:person>
     </par:customerModel>

  </ser:CustomPartyModel>

どちらの場合も、データバインディングにAegisを使用していますが、JAXBも試しましたが、それ以上の成功はありませんでした。

同じメソッドシグネチャを持つ同じメソッドを考えると、非同期と同期の両方で同じリクエストを使用できると予想されますが、そうではないようです。

誰かが同様の問題を抱えているか、おそらくこれに関していくつかの光を当てることができますか?

次の依存関係を使用していることに注意してください:cxf-api-2.2.2.jar、cxf-common-utilities-2.2.2.jar、cxf-rt-databinding-aegis-2.2.2.jar、XmlSchema-1.4.5。 jar、cxf-rt-transports-jms-2.2.2.jar、spring-jms-2.5.5.jar、acegi-security-1.0.7.jar

4

1 に答える 1

0

基本的に、JMS と同期 SOAP を介してリクエストをドキュメント リテラルとして送信できるソリューションを見つけました。以下はインターフェイスで定義する必要があります。

@WebService
@SOAPBinding(style=Style.DOCUMENT, use=Use.LITERAL,parameterStyle=ParameterStyle.BARE)
public interface ExampleAsyncService {

Document/Literal/Bare 構成がない場合、JMS は RPC ラップ スタイル リクエストを送信する傾向があります。

于 2013-02-19T09:46:22.710 に答える