package com.util;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class WebServiceClient {
public static String test(String key,String jsonMsg,String endpoint,String orgid,String type) throws ServiceException, MalformedURLException, RemoteException {
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpoint));
call.setOperationName("revInsuranceData");
call.setUseSOAPAction(true);
String res = (String) call.invoke(new Object[] { id1,type });
decryptStr = eu.getDecryptStr(key, res);
System.out.println(decryptStr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return decryptStr;
}
public static void main(String[] args) throws Exception {
test( key, jsonMsg, endpoint, orgid, type);
}
}
使用main测试的时候是没有问题的,当放在tomact下,通过方法调用,就会在Service service = new Service()处卡主,使用try/catch捕获异常,会看到java.lang.reflect.InvocationTargetException,但在控制台并不输出这个错误,各个jar包均已经导入,很迷茫呢。等待着大神。
因为Service是一个类
可以把Service实体类代码po出来吗,可能里面有点问题.
在网上看到别人的回复:
看了网上百度的很多答案,所版本不对的,真他么扯淡,我的解决了,是因为实体类的据的get,set方法的数据类型不对,比如定义了private Double str;set,get方法是指定类型的时候就不能指定为double类型,java的Double和double还是不一样的
Main可以 tomcat不可以 其他都没变,很可能是你导的jar包和tomcat自带的jar冲突了,你看下你Tomcat/lib下是否有axis包呢,还有你说控制台不输出日志,错误应该是Error而不是Exception,你换成catch ThrowAble试试
源码
public javax.xml.rpc.Call createCall() throws ServiceException {
this._call = new Call(this);
return this._call;
}
返回的是 javax.xml.rpc.Call 不是你引用的org.apache.axis.client.Call;
对一个类的声明,只有声明了才能使用
由于tomcat在启动时会加载自己的jar包,所以不会加载工程中的相同jar包,后来的解决办法是删除其中的相同的jar包解决的,还有可能是你没有把这个包加入到工程里面来(意思是虽然放到工程里面了,但是没有加载路径,到时程序运行时无法找到该包造成的)
由于tomcat在启动时会加载自己的jar包,所以不会加载工程中的相同jar包,后来的解决办法是删除其中的相同的jar包解决的,还有可能是你没有把这个包加入到工程里面来(意思是虽然放到工程里面了,但是没有加载路径,到时程序运行时无法找到该包造成的)
对一个类的声明,只有声明了才能使用
可以先查一下服务器上tomcat的版本,和你本地的tomcat版本,然后重新引入外部jar包,再修改一下对应的一些引用试试
由于tomcat在启动时会加载自己的jar包,所以不会加载工程中的相同jar包,后来的解决办法是删除其中的相同的jar包解决的,还有可能是你没有把这个包加入到工程里面来(意思是虽然放到工程里面了,但是没有加载路径,到时程序运行时无法找到该包造成的)
对一个类的声明,只有声明了才能使用
由于tomcat在启动时会加载自己的jar包,所以不会加载工程中的相同jar包,后来的解决办法是删除其中的相同的jar包解决的,还有可能是你没有把这个包加入到工程里面来(意思是虽然放到工程里面了,但是没有加载路径,到时程序运行时无法找到该包造成的)
这是对类的声明啊,声明了才行
更新一下配置,用新版本的jar就好用了
由于tomcat在启动时会加载自己的jar包,所以不会加载工程中的相同jar包,后来的解决办法是删除其中的相同的jar包解决的,还有可能是你没有把这个包加入到工程里面来(意思是虽然放到工程里面了,但是没有加载路径,到时程序运行时无法找到该包造成的)
这是对类的声明啊,声明了才行
声明一个类,声明之后可以用service. 来应用service里面的属性和方法
InvocationTargetException-->方法的内部抛出了异常而没有被捕获时,将由此异常接收。new Service()的时候是不是和其他配置有冲突?
由于tomcat在启动时会加载自己的jar包,所以不会加载工程中的相同jar包,后来的解决办法是删除其中的相同的jar包解决的,还有可能是你没有把这个包加入到工程里面来(意思是虽然放到工程里面了,但是没有加载路径,到时程序运行时无法找到该包造成的)
InvocationTargetException 是一种包装由调用方法或构造方法所抛出异常的受查异常。你本地tomcat版本和服务器上的版本应该不一致,需要重新导入jar包
因为service是一个对象啊Service是类或方法
先查一下服务器上tomcat的版本,和你本地的tomcat版本,然后重新引入外部jar包,再修改一下对应的一些引用试试
这是对类的声明啊,声明了才行
由于一系列的原因以及问题还有详情,对于这个代码,其实它很简单,很容易明白,你可以把它理解成一种房间,就是把房间整理好,就是新的房间,
类的操作必须是对对象进行操作
InvocationTargetException异常由Method.invoke(obj, args...)方法抛出。当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收。参考:https://yq.aliyun.com/articles/32588
估计是这里的id1和type参数值有问题,检查下。
String res = (String) call.invoke(new Object[] { id1,type });
对类的声明啊,声明了才行由于tomcat在启动时会加载自己的jar包,所以不会加载工程中的相同jar包,后来的解决办法是删除其中的相同的jar包解决的,还有可能是你没有把这个包加入到工程里面来(
需要对类进行声明,还有就是tomcat需要加载jar包
问题还是没有解决,经过测试,感觉像是axis1与tomcat7有冲突。
java.lang.reflect.InvocationTargetException 我感觉应该是你强制类型转换出错了吧
Call call = (Call) service.createCall();