@Test
void contextLoads() {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(cl);
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client clientA = dcf.createClient("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
Object[] resultA = new Object[0];
try {
resultA = clientA.invoke("getMobileCodeInfo", "15997826736","");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("resultA===>" + resultA[0]);
// Thread.currentThread().setContextClassLoader(cl);
JaxWsDynamicClientFactory dcf1 = JaxWsDynamicClientFactory.newInstance();
Client clientB = dcf1.createClient("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl");
Object[] resultB = new Object[0];
try {
resultB = clientB.invoke("qqCheckOnline", "975297980");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("resultB===>" + resultB[0]);
}
问题:在一个方法中同时调用2个webservice服务会出现
Caused by: javax.xml.bind.JAXBException: cn.com.webxml.QqCheckOnline is not known to this context
报错
解决方法:需要在第二次调用时,重置上下文
修改后代码:
@Test
void contextLoads() {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
// Thread.currentThread().setContextClassLoader(cl);
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client clientA = dcf.createClient("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
Object[] resultA = new Object[0];
try {
resultA = clientA.invoke("getMobileCodeInfo", "15997826736","");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("resultA===>" + resultA[0]);
Thread.currentThread().setContextClassLoader(cl);
JaxWsDynamicClientFactory dcf1 = JaxWsDynamicClientFactory.newInstance();
Client clientB = dcf1.createClient("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl");
Object[] resultB = new Object[0];
try {
resultB = clientB.invoke("qqCheckOnline", "975297980");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("resultB===>" + resultB[0]);
}
后续还是会出现这个问题,解决方法,在调用的工具类中重置上下文
static ClassLoader cl = Thread.currentThread().getContextClassLoader();
public static void test01(){
Thread.currentThread().setContextClassLoader(cl);
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client clientA = dcf.createClient("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
Object[] resultA = new Object[0];
try {
resultA = clientA.invoke("getMobileCodeInfo", "15997826736","");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("resultA===>" + resultA[0]);
}
public static void test02(){
Thread.currentThread().setContextClassLoader(cl);
JaxWsDynamicClientFactory dcf1 = JaxWsDynamicClientFactory.newInstance();
Client clientB = dcf1.createClient("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl");
Object[] resultB = new Object[0];
try {
resultB = clientB.invoke("qqCheckOnline", "975297980");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("resultB===>" + resultB[0]);
}