2010-09-27 27 views
3

我創造,需要一個SOAP頭,看起來像這樣一個.net SOAP服務的Groovy客戶端:使用CXF(實際上是GroovyWS),如何生成一個帶有文本節點的子節點的SOAP頭?

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

我發現the faq for adding headers to CXF messages,它讓我幾乎沒有,但並不完全。他們給了選項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」,我不知道如何在那裏得到它。

是否有一些簡單的事情可以傳遞給Header構造函數來創建該節點?

A separate post談到了使用不同的技術,但是當我嘗試使用它時,會在SoapFactory的周圍引發錯誤。

我發現的其他許多東西都需要用一堆附加代碼來創建擴展AbstractPhaseInterceptor類的東西,當我想要的東西太近時:)。

回答

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推薦的方式並向Header類中添加一個節點子節點。

相關問題