java调用webservice报错

地雷 2011-12-29 04:35:48
对方webservice接口是.net开发的,在网上找了个例子,测试,但是没有成功。
下面是代码:

private static String wsdlUrl = "http://tempuri.org/WebDBManage/Database/GetDataSetByYearAndMonth";
public static void main(String[] args) {

try {
Integer iYear = new Integer(2011);
Integer iMonth = new Integer(1);
String endPoint = "http://192.168.1.104:80/WebDBManage/Database.asmx?wsdl";
Service service = new Service();

Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endPoint);
call.setReturnClass(java.lang.String[].class);
call.addParameter("iYear", //设置要传递的参数
org.apache.axis.encoding.XMLType.XSD_INT,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.addParameter("iMonth", org.apache.axis.encoding.XMLType.XSD_INT,
javax.xml.rpc.ParameterMode.IN);

call.setOperationName("GetDataSetByYearAndMonth");
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://tempuri.org/WebDBManage/Database/GetDataSetByYearAndMonth");
Object results = (Object) call.invoke(new Object[]{iYear,iMonth});
}
catch (Exception e) {
e.printStackTrace();
}
}

IP是用的对方提供的,运行后报错。
15:59:55,546 ERROR Call:2274 - Exception:
org.xml.sax.SAXException: No deserializer for {http://www.w3.org/2001/XMLSchema}anyType
搜索后未找到解决办法,求解。
...全文
133 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
地雷 2012-01-09
  • 打赏
  • 举报
回复
直接调用地址就OK了,用WSDL2JAVA逆向生成的代码可以连接,但是自定义的类型不懂怎么调用的。。下面是我最终的解决方法。
楼上两位给辛苦分

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
org.w3c.dom.Document doc = builder.parse("");//String直接加地址就可以了
cacoda 2011-12-29
  • 打赏
  • 举报
回复
运行http://tempuri.org/WebDBManage/Database/GetDataSetByYearAndMonth?wsdl获取wsdl文件,然后用axis工具转成java类,你就会看到该webservice所有的类及方法,直接初始化类,调用类实例的方法即可。
zhouyusunquan 2011-12-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 woaidoudoue 的回复:]
对方webservice接口是.net开发的,在网上找了个例子,测试,但是没有成功。
下面是代码:
Java code

private static String wsdlUrl = "http://tempuri.org/WebDBManage/Database/GetDataSetByYearAndMonth";
public static void main(S……
[/Quote]你看着wsdl,自己创建个接口文件,放在你本地,跟服务端目录一样,直接调用那个方法好了
/*
* 获取对象
*/
public Object getService(String className, String url) {
// 创建service工厂
ObjectServiceFactory o = new ObjectServiceFactory();
Service ss = null;
try {
// 创建service
ss = o.create(Class.forName(className));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 创建xfire代理工厂
XFireProxyFactory xf = new XFireProxyFactory(XFireFactory.newInstance()
.getXFire());
Object obj = null;
try {
// 创建对象
obj = xf.create(ss, url);
} catch (Exception ex) {
}
return obj;
}
public static void main(String args[]){
CallService c=new CallService();
String input=new ReadProperties().ReadXml("src/com/util/1001.xml");
Bean2xml b2x=new Bean2xml();
com.pojo.E2001.call.ESPT obj=(ESPT) b2x.Xml2Bean(input, "ESPT",
com.pojo.E2001.call.ESPT.class);
System.out.println(input);
String input01=b2x.Bean2xml(obj, "ESPT");
System.out.println(input01);
SingleInsuranceAppService s=(SingleInsuranceAppService) c.getService("com.chinalife.fsys.services.bs.impl.SingleInsuranceAppService", "http://116.236.239.68:21401/FS2.0.0/services/SingleInsuranceAppService?wsdl");
System.out.println(input.length());
input=input.replaceAll("> <", "><");
System.out.println(s.s2001_submitApplication(input01));
}

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧