org.apache.cxf.interceptor.Fault: Marshalling Error: XXXX is not known to this context
来源:互联网 发布:淘宝买家秀震动棒 编辑:程序博客网 时间:2024/06/06 14:18
今天在调用webservice 接口时,报如下错误
org.apache.cxf.interceptor.Fault: Marshalling Error: XXXX is not known to this context
原因: cxf的一个方法或者说一个请求中,多次调用webservice时,不允许存在多个webservice的wsdl地址
解决办法: 每次调用每次修改wsdl前,重置上下文
public class WsInvoker { /** * 调用接口, * @param wsdl * @param method * @param jsons 不定参,可以多个参数 * @return */ public String invoke(String wsdl, String method, String... jsons) { String result = ""; if (null != jsons && jsons.length > 0) { JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client = dcf.createClient(wsdl); if (null != client) { try { Object[] objects = client.invoke(method, jsons); result = objects[0].toString(); } catch (Exception e) { e.printStackTrace(); } } } return result; }}
重置上下文的代码如下
public void calculate(){ //在一个方法中连续调用多次WebService接口,每次调用前需要重置上下文 ClassLoader cl = Thread.currentThread().getContextClassLoader(); WsInvoker wsInvoker = new WsInvoker(); String json="test"; Thread.currentThread().setContextClassLoader(cl);//调用接口前重置上下文 String result1 = wsInvoker.invoke(WSDL1,METHOD1, json); //获取接口返回的数据 String json="test"; Thread.currentThread().setContextClassLoader(cl);//调用接口前重置上下文 String result2 = wsInvoker.invoke(WSDL1,METHOD2, json); //menthod已经变了 String json="test"; Thread.currentThread().setContextClassLoader(cl);//调用接口前重置上下文 String result3 = wsInvoker.invoke(WSDL2,METHOD3, json); //wsdl和method都变了 }
另外需要注意的地方是,ClassLoader必须在最外层的请求中生成,
如果是在被调用的方法中生成,且有多次调用该方法,则还是会报错
阅读全文
0 0
- org.apache.cxf.interceptor.Fault: Marshalling Error: XXXX is not known to this context
- Marshalling Error: XXXX is not known to this context
- [解决]Marshalling Error: class XXX nor any of its super class is known to this context
- org.apache.cxf.interceptor.Fault: Unmarshalling Error:
- java cxf org.apache.cxf.interceptor.Fault: Unmarshalling Error: null
- java cxf org.apache.cxf.interceptor.Fault: Unmarshalling Error: null
- org.apache.cxf.interceptor.Fault
- org.apache.cxf.interceptor.Fault:Could not send Message
- org.apache.cxf.interceptor.Fault: Unmarshalling Error错误解决方案
- org.apache.cxf.interceptor.Fault: Could not send Message.(CXF客户端访问服务器端出错)
- org.apache.cxf.interceptor.Fault: Could not initialize class org.springframework.jdbc.core.Statement
- org.apache.cxf.interceptor.Fault: The given SOAPAction ... does not match an operation
- WebService报org.apache.cxf.interceptor.Fault: Could not send Message 错误
- org.apache.cxf.interceptor.Fault: The given SOAPAction ... does not match an operation
- WebService报org.apache.cxf.interceptor.Fault: Could not send Message 错误
- org.apache.cxf.interceptor.Fault: Unmarshalling Error: 意外的元素 (uri:"", local:"action")
- cxf未开启服务端时产生的报错org.apache.cxf.interceptor.Fault: Could not send Message.
- org.apache.cxf.interceptor.Fault: Unexpected wrapper element {****}
- 十三张/十三水 最优组合
- 自定义过滤器
- 迷宫问题 (广搜并记录路径)
- poj 2112 Optimal Milking 二分最短路网络流
- 层次聚类
- org.apache.cxf.interceptor.Fault: Marshalling Error: XXXX is not known to this context
- solr6.3.0集群安装
- c++ copy elision,RVO, 省略不必要的构造和析构, std::move
- 系统调用、API之间的关系
- 线索二叉树
- 信号与槽的新语法(Qt5)
- Gym
- 【已解决】win10环境下基于nltk搭建stanford parser环境,进行中文依存句法分析
- 深度学习笔记整理