首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

Java Axis2调用C# webService 传递参数有关问题,就没有一个人能解决有关问题这有关问题?这到底有多难

2014-04-25 
Java Axis2调用C# webService 传递参数问题,就没有一个人能解决问题这问题?这到底有多难。已经发了三个帖子

Java Axis2调用C# webService 传递参数问题,就没有一个人能解决问题这问题?这到底有多难。
已经发了三个帖子了,也问了十多个人了。我想这问题应该没人知道了诶 技术牛人都回家过年了?Java Axis2调用C# webService 传递参数有关问题,就没有一个人能解决有关问题这有关问题?这到底有多难

问题是这样的:
             接口是C#写的,我这边Java调用他的方法
     调用说明:
     接口所有参数均使用xml字符串;
             String 类型 XML格式 参数 
我这边参数 在工具里面测试 是可以测试出数据一切正常,在myeclipse代码执行 总返回XML格式错误
无参方法可以成功获取数据,有参方法都是格式不正确 找了一个多星期了都没有收获  = =我只想说我没做过Webservice这一块。Java Axis2调用C# webService 传递参数有关问题,就没有一个人能解决有关问题这有关问题?这到底有多难

求大神帮忙解决下面帖子是之前发的方法需求等:
http://bbs.csdn.net/topics/390695224?page=1#post-396612018



import javax.xml.namespace.QName;

import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class AV {

/**
 * @param args
 * 航班接口测试
 */
public static void main(String[] args) {

//AV参数
String xml = "<?xml version="1.0" encoding="UTF-8"?>" +
"<ParamsXml><Params>" +
"<AgentID>HBJT</AgentID>" +
"<DepartureAirport>CAN</DepartureAirport>" +
"<ArriveAirport>PEK</ArriveAirport>" +
"<DepartureDate>2014-02-20</DepartureDate>" +
"<CarrierCode>CZ</CarrierCode>" +
"<FS>D</FS>" +
"</Params></ParamsXml>";

System.out.println("输出参数"+xml);

//WebService 调用工具
String url = "http://ws04.itour.cn:8084/ItourAgentCRSService.asmx";

//操作命名控件 和 方法
QName  qname  = new QName("http://itour.cn/","AV"); 

//设定参数类型
Object param[] = new Object[] { xml }; 


try {
//实例化远程服务调用客户端对象 
    RPCServiceClient client = new RPCServiceClient();
    
    //实例化Options对象 
Options options = new Options(); 

//设置Options对象的连接终端地址 
options.setTo(new EndpointReference(url)); 

//设置Options对象的操作事件对象 
options.setAction("http://itour.cn/AV"); 

//为远程服务调用客户端对象设置Options子对象 
client.setOptions(options); 

//传递参数,调用服务,获取服务返回结果集
OMElement element = client.invokeBlocking(qname, param); 

//获取返回结果集中第一条结果的返回内容 
 String result=element.getFirstElement().getText(); 

 System.out.println("返回结果"+result);
 
} catch (AxisFault e) { 

e.printStackTrace();


}

}



输出参数<?xml version="1.0" encoding="UTF-8"?><ParamsXml><Params><AgentID>HBJT</AgentID><DepartureAirport>CAN</DepartureAirport><ArriveAirport>PEK</ArriveAirport><DepartureDate>2014-02-20</DepartureDate><CarrierCode>CZ</CarrierCode><FS>D</FS></Params></ParamsXml>

返回结果<?xml version="1.0" encoding="UTF-8"?><ItourAgentCRSService><Success>01</Success><Errors>Xml输入参数格式不正确</Errors><Result></Result></ItourAgentCRSService>

[解决办法]
public static void main(String[] args) throws IOException {
String url = "http://ws04.itour.cn:8084/ItourAgentCRSService.asmx?wsdl";
String operateName = "mesDelete";//你要调用的方法名
String namespace="";

Service service = new Service();
Call call = null;
try {
call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(operateName);   
call.setReturnType(XMLType.XSD_STRING);
call.addParameter("AgentID",   XMLType.XSD_INTEGER,  ParameterMode.IN);
call.addParameter("DepartureAirport",   XMLType.XSD_INTEGER,  ParameterMode.IN);
call.addParameter("ArriveAirport",   XMLType.XSD_INTEGER,  ParameterMode.IN);
call.addParameter("DepartureDate",   XMLType.XSD_INTEGER,  ParameterMode.IN);


call.addParameter("CarrierCode",   XMLType.XSD_INTEGER,  ParameterMode.IN);
call.addParameter("FS",   XMLType.XSD_INTEGER,  ParameterMode.IN);




String result = (String)call.invoke(
new Object[] {"GDDX","CAN","PEK","2014-01-18","","D"});
System.out.println(result);
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
[解决办法]
楼主别纠结了,我给你点东西:
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace namespace = factory.createOMNamespace("http://xxx你的namespace", "xsd");
OMElement jsonElement = factory.createOMElement("jsonstr",null);//jsonstr,参数名
String fcJson = fcObj.toString();//json字符串
jsonElement.addChild(factory.createOMText(jsonElement,fcJson));//参数赋值
OMElement method = factory.createOMElement("方法名称",namespace);//换成你自己的
method.addChild(jsonElement);//给方法加入参数

//最后调用并传递参数
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement result = sender.sendReceive(method);
String resultStr = result.getFirstElement().getText();
[解决办法]
会的人绝对是不少,不过主要还得靠自己努力
[解决办法]
仔细看看,http抓包看得很明显的,如果不好用,装个wireshark,没数据说明在本地就已经没通过,而你的说明是服务器返回了,看仔细点

热点排行