3

次のような SOAP ヘッダーを必要とする .net SOAP サービス用の Groovy クライアントを作成しています。

<soap:Header>
    <HeaderInfo xmlns="http://foo.bar.com/ns">
        <token>abc-unique-token</token>
    </HeaderInfo>
</soap:Header>

CXF メッセージにヘッダーを追加するための FAQを見つけました。オプション 4 の例は次のようになります。

    List<Header> headers = new ArrayList<Header>()
    Header header = new Header(new QName("http://foo.bar.com/ns", "HeaderInfo"), 
        "abc-unique-token", new JAXBDataBinding(String.class))
    headers.add(header)

    proxy.client.getRequestContext().put(Header.HEADER_LIST, headers)

このコードを使用して、これを行うことができます。

<soap:Header>
    <HeaderInfo xmlns="http://foo.bar.com/ns">
        abc-unique-token
    </HeaderInfo>
</soap:Header>

しかし、「HeaderInfo」ノードには、「abc-unique-token」を囲む子「token」ノードがありません。そこに入れる方法がわかりません。

そのノードを作成するために Header コンストラクターに渡すことができる簡単なものはありますか?

別の投稿では、別の手法の使用について説明していますが、これを使用しようとすると、SoapFactory の周りでエラーがスローされます。

私が見つけた他のものの多くは、私が望むものが非常に近い場合、AbstractPhaseInterceptor クラスを拡張するものを作成する必要があります。

4

1 に答える 1

5

私が言及した別の投稿のSOAPFactoryメソッドが機能するにはsaaj-impl.jarが必要であることを理解した後、これを使用して機能させることができました。

List<Header> headers = new ArrayList<Header>()
SOAPFactory sf = SOAPFactory.newInstance()
def authElement = sf.createElement(new QName("http://foo.bar.com/ns", "HeaderInfo"))
def tokenElement = authElement.addChildElement("token")
tokenElement.addTextNode("abc-unique-token")
SoapHeader tokenHeader = new SoapHeader(
    new QName("http://foo.bar.com/ns", "HeaderInfo"), authElement);
headers.add(tokenHeader);
proxy.client.getRequestContext().put(Header.HEADER_LIST, headers)

CXFが推奨する方法でそれを行い、ヘッダークラ​​スにノードの子を追加することについて、私はまだ興味があります(そして答えを受け入れます)。

于 2010-09-27T21:50:00.363 に答える