java webservice
最近有个PHP项目,要我做一个JAVA端的调用对方的接口,以前没坐过,完全昏的!在网上找了很多,但是都是模糊的感觉。我就请教一下大家了,这个调用的流程是怎样的。要用到asix方法,我主要是没搞懂调用接口是怎么实现的,这个过程不清楚,需要配置些什么,我这有段代码,贴出来,让大家帮我解析一下,这个方法的参数是什么意思,返回的是什么类型的结果,可以给我发邮箱841820399@qq。cm:
public static String getWebserviceInfo(String wsdladdr,String xmlStr,String wsAddr){//此方法需要在 客户端设置接受SESSEION
javax.servlet.http.HttpSession session=null;
BASE64Encoder encoder = new BASE64Encoder();
BASE64Decoder decoder = new BASE64Decoder();
Base64 cdrjBase64 = new Base64();
StringReader sr = null;
InputSource is = null;
DOMParser dom = null;
Document doc = null;
String sResult=""; Table tblResult = null;
try{
Service service = new Service();
service.setMaintainSession(true);//设置为保持会话
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(wsdladdr);
call.setOperationName("userLogin");//WSDL里面描述的接口名称
call.addParameter("uName", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
call.addParameter("uPwd", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
call.addParameter("aKey", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_BOOLEAN);//设置返回类型
String uName = "YS";//String uPwd= "AdGakfSwNC";
String uPwd=cdrjBase64.enCrypt("123");
String aKey =Universal.MD5(Universal.getString(uPwd)+ Universal.dateToStr(new java.util.Date()));
Object result = call.invoke(new Object[]{uName,uPwd,aKey}); //给方法传递参数,并且调用方法
if(result.toString().equalsIgnoreCase("true")){
call.removeAllParameters();
call.setOperationName("doRequest");//WSDL里面描述的接口名称
call.addParameter("contfileNo", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
sResult = (String)call.invoke(new Object[]{xmlStr}); //给方法传递参数,并且调用方法
}else{
throw new Exception("webservice 登陆不成功!");
}
}catch (Exception ex){
ex.printStackTrace();
System.out.println("getWebserviceInfo的异常Exception is "+ex.getMessage());
}
return sResult;
}
} --------------------编程问答-------------------- 我感觉调用对方的接口,应该是对方写webservice吧,你只需要调用他的url就可以了。开发接口的工作应该在对方,而不在你。 --------------------编程问答-------------------- 对方是服务端,你是客户端,你只要知道对方webservice的url要带什么参数,调用什么方法名就可以了。 --------------------编程问答-------------------- 你只是调用对方的webservice接口,一般调用对方只会提供一个服务地址即url或wsdl文件给你,你贴的代码是用axis调用的。我调接口,都是用axis的wsdl2java命令自动生成客户端调用的一些辅助类,在通过这些辅助类来调用接口。我自己写了简单的实例和操作方法,包括配置什么的,如果你需要发给你。 --------------------编程问答--------------------
发给我吧,让我看看,多学习!很感谢。再问一下,就是对方假如只给我一个WSDL文件“http://218.75.129.178:9080/FundControl/wsdl/fundcontrolpackage/FundControlService.wsdl”,我是怎么调用呢,call.setTargetEndpointAddress("")里的地址我写什么呢,我看网上的都是写的是wsdl发布成了webservice的地址。但是这还只是一个WSDL文件,没法发布的 --------------------编程问答--------------------
发给我吧,让我看看,多学习!很感谢。再问一下,就是对方假如只给我一个WSDL文件“http://218.75.129.178:9080/FundControl/wsdl/fundcontrolpackage/FundControlService.wsdl”,我是怎么调用呢,call.setTargetEndpointAddress("")里的地址我写什么呢,我看网上的都是写的是wsdl发布成了webservice的地址。但是这还只是一个WSDL文件,没法发布的 --------------------编程问答-------------------- 再追问一下,如果是我要传一个STRING类型的XML过去,该怎么做呢 --------------------编程问答-------------------- 用他给的地址生成webservice客户端
然后调用生成的代码里的方法,按照需要的参数传递进去就行了 --------------------编程问答-------------------- sResult = (String)call.invoke(new Object[]{xmlStr}); 这个参数是一个STRING型的xml,怎么做传啊 --------------------编程问答--------------------
但是他只给我一个WSDL文件,我自己去生成webservice地址吗 --------------------编程问答--------------------
http://218.75.129.178:9080/FundControl/wsdl/fundcontrolpackage/FundControlService?wsdl
这个不就是地址么。。。 --------------------编程问答-------------------- http://218.75.129.178:9080/FundControl/wsdl/fundcontrolpackage/FundControlService?wsdl
打开这个链接后有命名空间什么的,webservice接口有固定的模式调用的,你可以找你的顶头上司问问有没类似的模板, --------------------编程问答-------------------- --------------------编程问答-------------------- http://218.75.129.178:9080/FundControl/wsdl/fundcontrolpackage/FundControlService
后面跟?wsdl是显示服务的信息,可以获得方法的名称和参数
后面跟/方法名?参数=A&参数1=B这样是调用方法
实际使用的时候以上的方式仅供调试,axis2已经封装好了接收客户端的处理。
补充:Java , Web 开发