随着CXF(实际上GroovyWS),我该如何生成具有文本节点一个子节点的SOAP消息头?

StackOverflow https://stackoverflow.com/questions/3807922

我创建用于.NET SOAP服务一个Groovy客户端,需要一个SOAP标头,看起来像这样:

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

我发现的FAQ添加报头以CXF消息它让我几乎没有,但并不完全。的例子,他们给出选项这样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唯一令牌”,我不知道如何得到它在那里。

有一些简单的事情,我可以传递给头部构造器创建一个节点?

一个独立后有关使用不同的技术谈判,但这引发错误对我周围的的SOAPFactory当我尝试使用它。

很多的其他的东西,我发现进入需要创建的东西时,我要的是如此接近延伸至与一堆额外的代码,AbstractPhaseInterceptor类。)

有帮助吗?

解决方案

我能够搞清楚后得到它使用此工作,在分离后的的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推荐的方法和添加节点孩子的头类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top