访问webService时,报错,但是可以用http Post访问

xieyuanxi 2011-08-24 07:02:34
最近在做一个蛋疼的电信SP的东西
拿到了他们给的wsdl之后,用cxf生产代码后,客户端为:
DataSyncService ss = new DataSyncService(wsdlURL, SERVICE_NAME);
DataSync port = ss.getDataSync();

服务端在电信那边
但是我在初始化服务的时候就出错了
如果我使用 http client post请求过去,当然我post的是xml格式的,就能成功

原因是:new DataSyncService(wsdlURL, SERVICE_NAME); 底层会去服务端加载wsdl文件回来,然后再生产
我就郁闷了,我本地也有wsdl,为什么非得去服务端加载呢,这样的话就导致了两次通讯,第一次加载,第二次才真正发送
而http post的方式话,就直接是一次,往服务器发送消息即可。
求解决方法·····
qq:562814993
...全文
505 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xieyuanxi 2011-08-28
  • 打赏
  • 举报
回复
我找到原因了,webservice 其实是有两种调用的方法,一种是读取服务端的在线WSDL,然后构造服务,调用服务,一种是使用本地生成服务,根据调用服务,当然这种也需要知道服务端的地址,只是在生成服务的时候,是调用本地的类去生成,不需要去读取服务端的在线的WADL,(很多服务端不支持在线读取WSDL这种做法)
xieyuanxi 2011-08-25
  • 打赏
  • 举报
回复
hai,我今天换了用axis来试,是可以的,我抓包发现,知道正在发送消息,他才跟服务端连接
这跟 cxf的不一样
不知道是否他们两个的实现机制还是我设置的问题
luohuijun619 2011-08-24
  • 打赏
  • 举报
回复
cxf调用

public class CallDNet {
public static DynamicClientFactory dcf = DynamicClientFactory.newInstance();
public static org.apache.cxf.endpoint.Client client = dcf
.createClient("http://www.i-pinche.com//handler/PinCheWebServiceMethods.asmx?wsdl");

/**
* @param args
*/
public static void main(String[] args) {
asynchronously();
}

/**
* 异步
*/
public static void asynchronously() {
ClientCallback callback = new ClientCallback();
try {
client.invoke(callback, "GetRoadList");
Map<String, Object> map = callback.getResponseContext();
for (String key : map.keySet()) {
System.out.println(map.get(key));
}

Object[] replys = callback.get();

for (Object o : replys) {
System.out.println(o);
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 同步
*/
public static void synchronously() {
Object[] replys = null;
try {
replys = client.invoke("GetRoadList");
} catch (Exception e) {
e.printStackTrace();
}
for (Object o : replys) {
System.out.println(o);
}
}

}
luohuijun619 2011-08-24
  • 打赏
  • 举报
回复
不知道lz用什么客户端,可以换个客户端试试

http://blog.csdn.net/luohuijun619/article/details/5956484

看看这个
GIS__ 2011-08-24
  • 打赏
  • 举报
回复
public static void callWebservice() {  
try {
URL url = new URL(
"http://XXX.XXX.XXX.XXX/XXX?wsdl");
Client c = new Client(url);
Object[] results = c.invoke("GETDOMINOUSERBYID", new Object[] {
"USERID", "password" }); // 方法名,传递2个参数
Document obj = (Document) results[0];// web service返回的XML对象
if("1".equals(obj.getElementsByTagName("PASSWORD").item(0).getFirstChild().getNodeValue())){
if(obj.getElementsByTagName("SUBJECTLIST").item(0)!=null){
String strMailForm = obj.getElementsByTagName("MAILFROM").item(0).getFirstChild().getNodeValue().toString();
String strPostTime = obj.getElementsByTagName("POSTTIME").item(0).getFirstChild().getNodeValue().toString();
}
}
} catch (Exception e) {
e.printStackTrace();
}
softroad 2011-08-24
  • 打赏
  • 举报
回复
你是去请求服务器的xml,怎么能用本地的wsdl呢,你去了解下soap就知道怎么弄了
xieyuanxi 2011-08-24
  • 打赏
  • 举报
回复
困扰了很久的问题,没办法解决,逼得我用xmlbeans去构造xml格式去发送······

81,092

社区成员

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

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