Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SOAP:将方法从Axis1.4迁移到CXF以添加新的头_Java_Soap_Cxf_Axis - Fatal编程技术网

Java SOAP:将方法从Axis1.4迁移到CXF以添加新的头

Java SOAP:将方法从Axis1.4迁移到CXF以添加新的头,java,soap,cxf,axis,Java,Soap,Cxf,Axis,嗨!我正在尝试向SOAP调用添加头。 我对使用web服务还不熟悉 每次我需要使用web服务下载文件时,我都需要添加一个标题,如: defe3a08-4c8a-47c4-9303-98e09c475532 我正在使用CXF。我有一个轴1.4的例子。 剩下的(我希望)就是添加这个标题 这是我必须更新的内容: private static void addHeader(字符串ticketId){ SOAPHeaderElement标头=新的SOAPHeaderElement(“http://www

嗨!我正在尝试向SOAP调用添加头。 我对使用web服务还不熟悉

每次我需要使用web服务下载文件时,我都需要添加一个标题,如:


defe3a08-4c8a-47c4-9303-98e09c475532
我正在使用CXF。我有一个轴1.4的例子。 剩下的(我希望)就是添加这个标题

这是我必须更新的内容:

private static void addHeader(字符串ticketId){
SOAPHeaderElement标头=新的SOAPHeaderElement(“http://www.stats.com/“,“UserIdHeader”);
SOAPElement节点;
org.apache.axis.client.stubs=(Stub)服务;
s、 clearHeaders();
试一试{
node=header.addChildElement(“TicketId”);
node.addTextNode(ticketId);
s、 setHeader((org.apache.axis.message.SOAPHeaderElement)头);
}捕获(SOAPE例外){
e、 printStackTrace();
}
}
这就是我试图更新的方式:

private static void addHeader(String ticketId)抛出jaxbeexception、ParserConfigurationException{
Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element-eTicketId=doc.createElement(“TicketId”);
eTicketId.setTextContent(ticketId);
列表标题=新建ArrayList();
页眉页眉=新页眉(新QName(“http://www.stats.com/“,”UserIdHeader“,”UserIdHeader“,”userIDKetId,
新的JAXBDataBinding(String.class));
headers.add(header);
BindingProvider.class.cast(服务).getRequestContext().put(Header.Header\u列表,headers);
}
但我得到了以下例外:

[PhaseInterceptorChain]用于{http://www.stats.com/}服务#{http://www.stats.com/}GetFileList引发异常,正在解除
org.apache.cxf.interceptor.Fault:封送错误:org.apache.xerces.dom.ElementImpl在此上下文中未知
位于org.apache.cxf.jaxb.jaxbencoder.marshall(jaxbencoder.java:261)
位于org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:168)
位于org.apache.cxf.binding.soap.interceptor.soapoutiterceptor.writesapeinvelopestart(soapoutiterceptor.java:156)
位于org.apache.cxf.binding.soap.interceptor.soapoutiterceptor.handleMessage(soapoutiterceptor.java:81)
位于org.apache.cxf.binding.soap.interceptor.soapoutiterceptor.handleMessage(soapoutiterceptor.java:61)
位于org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
位于org.apache.cxf.endpoint.clientmpl.doInvoke(clientmpl.java:531)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:464)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:367)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:320)
位于org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89)
位于org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
我甚至尝试添加一个拦截器,但我不知道如何传递ticketId


有什么想法吗?

如果要创建DOM元素,不应该将数据绑定设置到Header对象中。只有在使用JAXB(或其他)类型时才需要数据绑定。CXF直接处理DOM元素。

这就是我让方法工作的方式(出于某种原因,在前面的方法中,没有写入头):

private static void addHeader(字符串ticketId){
试一试{
SOAPFactory sf=SOAPFactory.newInstance();
SOAPElement userIdHeaderElement=sf.createElement(新的QName(“http://www.stats.com/“,“UserIdHeader”);
SOAPElement TicketId=sf.createElement(新的QName(null,“TicketId”);
ticketId元素。addTextNode(ticketId);
userIdHeaderElement.addChildElement(ticketId元素);
列表标题=新建ArrayList();
Header dummyHeader=新标题(新QName(“http://www.stats.com/)、userIdHeaderElement);
headers.add(dummyHeader);
BindingProvider.class.cast(服务).getRequestContext().put(Header.Header\u列表,headers);
}捕获(SOAPE例外){
e、 printStackTrace();
}
}

谢谢丹尼尔!我不得不改变方法,但你的答案是正确的。我将把工作方法放在下面。