Java调用.net的webservice接口,对方无法获得参数?
我这里用的是java+axis1.4开发的客户端,对方是.net服务端,调用是成功的(对方出错信息反馈回来了),但是对方打印出参数都是空的:
java:
Call call = (Call)service.createCall();
URL u = new URL(serUrl);
call.setTargetEndpointAddress(u);
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://tempuri.org/test");
call.setOperationName(new QName("http://tempuri.org/","test");
call.addParameter(new QName("http://tempuri.org/","param1"),XMLType.XSD_STRING,ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
Object obj = call.invoke("test",new Object[]{"xxxxx"});
System.out.println(obj);
--------------对方程序
[WebService(Namespace="http://tmpuri.org/")]
...
public class....
public String test(String param1){
if(string.IsNullOrEmpty(param1)) throw new ApplicationException("参数为空");//这句话客户端能获取到
奇怪的是我客户端的程序在其他项目中也是这么写的,而且能够正常使用,唯独这个项目不好使,请各位大侠分析一下原因,谢谢。。。。
[解决办法]
http://developer.51cto.com/art/200906/131217.htm
之前做过一个,java部分的没问题,但是对方方法之前,参数上面好像要加写东西,看下上面文章。
[解决办法]
不知道楼主客户端可有报什么错误?
是要实现什么功能?
你调用的时候参数是字符串还是对象等等 ?
参数应当为期设置addParameter值。
//OK public static void quickReg(String tel) {final String wsdl = "http://localhost:8000/services/UserInfoWebService"; Service service = new Service(); Call call; try { call = (Call) service.createCall(); try { call.setTargetEndpointAddress(new java.net.URL(wsdl)); } catch (MalformedURLException e) { e.printStackTrace(); } call.setOperationName("quick");//WSDL里面描述的接口名称 call.getMessageContext().setUsername("user"); call.getMessageContext().setPassword("password"); call.addParameter("userphone", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//接口的参数 call.addParameter("checkcode", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//接口的参数 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING); Object xml; try { xml = (Object)call.invoke(new Object[]{tel,"code"}); //给方法传递参数,并且调用方法 System.out.println("result is "+xml); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ServiceException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
[解决办法]
估计是.net的配置的问题,好好查一下吧