1

春のWebサービスで実際にアンマーシャリングを呼び出すクラスを知っている人はいますか?ソープイターセプター内でアン/マーシャリングを呼び出すことが効果的/必要かどうか知りたいのですが。または、エンドポイント周辺のマーシャリングされていないオブジェクトを操作するためのより適切なインターセプターはありますか?はいの場合でも、内部でどのように機能するかを知りたいと思います。

ありがとう。

編集

実際、私はorg.springframework.ws.server.EndpointInterceptorより正確にするためにを使用しています。

4

2 に答える 2

2

AbstractMarshallingPayloadEndpointは、リクエストペイロードをオブジェクトにマーシャリングし、レスポンスオブジェクトをXMLにマーシャリングするエンドポイントです。そのinvoke()メソッドのソースコードを確認してください。

public final void invoke(MessageContext messageContext) throws Exception {
    WebServiceMessage request = messageContext.getRequest();
    Object requestObject = unmarshalRequest(request);
    if (onUnmarshalRequest(messageContext, requestObject)) {
        Object responseObject = invokeInternal(requestObject);
        if (responseObject != null) {
            WebServiceMessage response = messageContext.getResponse();
            marshalResponse(responseObject, response);
            onMarshalResponse(messageContext, requestObject, responseObject);
        }
    }
}

AbstractMarshallingPayloadEndpointには、XMLマーシャラーへの参照が必要です。

  • Castor XML:org.springframework.oxm.castor.CastorMarshaller
  • JAXB v1:org.springframework.oxm.jaxb.Jaxb1Marshaller
  • JAXB v2:org.springframework.oxm.jaxb.Jaxb2Marshaller
  • JiBX:org.springframework.oxm.jibx.JibxMarshaller
  • XMLBeans:org.springframework.oxm.xmlbeans.XmlBeansMarshaller
  • XStream:org.springframework.oxm.xstream.XStreamMarshaller

Spring-OXMでは、すべてのマーシャラークラスがMarshallerインターフェイスとUnmarshallerインターフェイスの両方を実装して、OXMマーシャリングのワンストップソリューション(Jaxb2Marshallerなど)を提供するため、applicationContextでAbstractMarshallingPayloadEndpoint実装を次のように配線します。

<bean id="myMarshallingPayloadEndpoint"
    class="com.example.webservice.MyMarshallingPayloadEndpoint">
    <property name="marshaller" ref="marshaller" />
    <property name="unmarshaller" ref="marshaller" />
    ... ...
</bean>

お役に立てれば。

于 2012-07-16T04:15:59.670 に答える
1

MethodArgumentResolverの実装は、要求ペイロードを適切な形式(xml Document、Dom4j、Jaxbなど)にマッピングする役割を果たします。これは、エンドポイントが呼び出される直前に行われます。インターセプターは、生のxml Source(javax.xml.transorm.Source)のみを取得します。

インターセプターで生のxmlをアンマーシャリングする場合は、アンマーシャラーへの参照を取得して自分で行う必要があります。マーシャリングされていないコンテンツを提供できるEndpointInterceptorの子は存在しないようです(非常に多くの異なる形式にマーシャリング解除できます)。

于 2012-07-16T00:30:35.000 に答える