现在有3个系统,分别是A,B,C。现在我在系统A中点击相应的按钮(假设的),将触发一个动作是用WebService调用系统B的一个方法b,b这个方法中又用WebService调用系统C的一个方法c,然后C返回B一个String用于说明是否调用成功,再次当C返回B一个String后,B再返回个String返回给A,也就是说在A调用B还没结束时,B用调用了C。(注意系统B中的方法b,即接受A的调用同时又调用C)这个过程中共用了两次WebService调用,而且比较特殊,因为在B调用C时A还是连接B的。这个过程中A调用B成功,但是当B调用C时就报错:org.apache.axis2.AxisFault: org.apache.axis2.addressing.EndpointReference.getAddressAttributes()Ljava/util/ArrayList;
这个错误提示应该是连接不到的错误。但是,我用A直接调B可以连通,用A直接调C可以连通,用B直接调C可以连通。他们两两之间是能连接通的。我用的是axis2,A、B、C系统都是java做的,服务器用的是JBOSS望高人能解决小弟的问题,不胜感激。并拜其为师。如果不清楚问题的可以QQ联系我,小弟QQ号:80229899 , 邮箱是: [email protected]
这个错误提示应该是连接不到的错误。但是,我用A直接调B可以连通,用A直接调C可以连通,用B直接调C可以连通。他们两两之间是能连接通的。我用的是axis2,A、B、C系统都是java做的,服务器用的是JBOSS望高人能解决小弟的问题,不胜感激。并拜其为师。如果不清楚问题的可以QQ联系我,小弟QQ号:80229899 , 邮箱是: [email protected]
解决方案 »
- struts2 如何在action中获取前台select控件的listKey值?
- 添加JSP xform:select,在线等
- <menu><item text="" action=""/></menu>这是什么?
- 求一个算法?
- 插入一条记录人事专员录入档案信息确认无误后提交,该条档案状态为“待复核”。由人事经理复核后状态变为“正常”
- 对j2se有了大体的了解,想学习j2ee,听说要先学习java web编程,各位觉得适合我这种程度的学习java web编程和j2ee的书都有哪些啊??
- 100分!关于怎么封装Jdbc连接oracle存储过程
- 谢谢 vcvj(福州,想2厦门,挣$还房款ing,想车ing) 的帮助(如何再Apaceh-axis中部署webService)
- 项目导入后发布tomcat报错
- 一个数据库(mysql) 俩个项目跑 有什么好解决方案或者注意的问题?
- Axis1.4认证问题!
- 服务器端用jxl写Excel, 保存到客户端!
这是系统A的一个测试类。
package com.client;import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.client.Options;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.rpc.client.RPCServiceClient;public class TestCYL {
private static EndpointReference targetEP0R = new EndpointReference("http://localhost:8080/axis2/services/EcardService");
//webservice地址 public static void main(String[] args) {
try {
String strHello = "我是CYL系统!";
int cid = 1;
int tid = 2;
String param = cid+","+tid;
RPCServiceClient serviceClient = new RPCServiceClient(); ;
Options options = serviceClient.getOptions();
options.setTo(targetEP0R);
//待调用服务的名称
QName opPrint = new QName("http://webservice.zzxy.com/xsd", "getCYLRequest");
//服务参数,是个对象数组
Object[] opGetVersionArgs = new Object[] { cid,tid };
//返回类型
Class[] returnTypes = new Class[] { Boolean.class };
//阻塞调用,得到返回值
Object[] response = serviceClient.invokeBlocking(opPrint,opGetVersionArgs,returnTypes);
Boolean strConn = (Boolean) response[0];
System.out.println("最后返回--->"+strConn); }
catch(AxisFault axisFault) {
axisFault.printStackTrace();
}
}
}
public String getCYLRequest(int cardID, int tableID){
System.out.println("收到的系统A发过来的参数是"+cardID+","+tableID);
String strYResultXML = "";
String strWSURL = "http://192.168.6.188:9090/axis2/services/EHubService";
String strClassURL = "http://webservice2.zzxy.com";
String strMethodName = "getEcardRequest";
System.out.println("--->1");
try {
EndpointReference targetEP0R = new EndpointReference(strWSURL);
//设置连接WebService的URL
RPCServiceClient serviceClient = new RPCServiceClient(); ;
Options options = serviceClient.getOptions();
options.setTo(targetEP0R);
System.out.println("--->2");
//待调用服务的名称,即方法名
QName opPrint = new QName(strClassURL, strMethodName);
System.out.println("--->3");
//给EHub方法传递的参数,是个对象数组
Object[] opGetVersionArgs = new Object[] { cardID,tableID };
System.out.println("--->4");
//设置EHub方法的返回类型
Class[] returnTypes = new Class[] { String.class };
System.out.println("--->5");
//阻塞调用,得到返回值
Object[] response = serviceClient.invokeBlocking(opPrint, opGetVersionArgs, returnTypes);
System.out.println("--->6"); strYResultXML = response[0].toString();
System.out.println(strYResultXML);
}
catch(AxisFault axisFault) {
axisFault.printStackTrace();
}
return strYResultXML;
}
public String getEcardRequest(int cardID, int tableID) {
System.out.println("连接成功!参数为:"+cardID+","+tableID);
String strYResultXML = "哈哈,成功"+cardID+","+tableID;
return strYResultXML;
}
System.out.println("收到的系统A发过来的参数是"+cardID+","+tableID);
在调用过程中是可以正常输出的如:“收到的系统A发过来的参数是1,2”。这说明A是可以和B连通的,
但是系统B调用系统C的getCYLRequest方法时,直接在系统B的控制台报错(如下):
org.apache.axis2.AxisFault: org.apache.axis2.addressing.EndpointReference.getAddressAttributes()Ljava/util/ArrayList; 而系统C的控制台根本就没有反应(既不报错,又不输出字符串),系统C的getCYLRequest方法的第一行 System.out.println("连接成功!参数为:"+cardID+","+tableID); 就根本没有输出任何东西, 由此说明系统B根本就没有链接到系统C
望高手指点啊!!!!!!!!!!!!!!!!!!
系统B是部署在jboss上的,系统C部署在tomcat上。工程都是在本机上。
另外再说明一点:系统A不通过系统B是可以连接到系统C的。
输出过了结果是:而系统C的控制台根本就没有反应(既不报错,又不输出字符串),系统C的getCYLRequest方法的第一行 System.out.println("连接成功!参数为:"+cardID+","+tableID); 就根本没有输出任何东西, 由此说明系统B根本就没有链接到系统C 。
请参看10楼的叙述
这样就可以判断到底发没法消息。
可能偶少见多怪,没这么用过,理论上也通不过吧,web服务本身就是松耦合的存在而被复用,服务提供者不可能在调用其他服务提供者,这样岂非
失去web服务优点了,人家怎么也是面对组件级别的,呵呵;