一、出发点:
之前调用webservice一直用的httppost,最近和c#调试接口的时候发现之前的方案调不通。
然后就把结果交给百度了,毕竟并不是我们喜欢粘贴复制。
别人搞好的东西,我们再花时间去研究,除了优化,就没看出其他意义。站在巨人的肩膀上,让我们起飞。
二、解决方案:
下面这个是贴的别人的参考代码:
地址的话给大家放出来 :Java调用C#WebService接口方式
package test; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import javax.xml.rpc.encoding.XMLType; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class MyTestPurchase { String result=""; String url = "http://locahost:8008/myWebService.asmx?wsdl"; String namespace = "http://tempuri.org/"; String methodName = "ReportCatalog"; String soapActionURI = "http://tempuri.org/ReportCatalog"; Service service = new Service(); Call call; try { call = (Call) service.createCall(); call.setTargetEndpointAddress(url); call.setUseSOAPAction(true); call.setSOAPActionURI(soapActionURI); call.setOperationName(new QName(namespace, methodName)); call.addParameter(new QName(namespace, "medicineName"), XMLType.XSD_STRING,ParameterMode.IN); call.addParameter(new QName(namespace, "pageNo"), XMLType.XSD_STRING,ParameterMode.IN); call.addParameter(new QName(namespace, "pageSize"), XMLType.XSD_STRING,ParameterMode.IN); call.setReturnType(XMLType.XSD_STRING); //对传入的参数进行赋值操作 String[] str = new String[3]; str[0] = medicineName; str[1] = pageNo; str[2] = pageSize; //开始调用服务 Object obj = call.invoke(str); result = (String)obj; System.out.println(obj); //对返回参数进行输出 } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } return result; public static void main(String[] args) { String result=doPP(); } }
整个代码如上,此方法试用于对webService服务没有进行修改格式,如果对文件格式进行了自己的约束,调用如下:
String url = "http://localhost:9000/services/cmcc_mas_wbs?wsdl"; //主要区别在于整个namespace,按照接口的wsdl文件查看对应值进行更改即可,参数的传递都是一样的 String namespace = "http://www.csapi.org/service"; String methodName = "sendSms"; String soapActionURI = "http://www.csapi.org/service/sendSms";
还有一篇,和上面这片文章相同之处不少.
WebService请求的几种方式
重要的部分我同步到下方:
通过axis请求:
先引入org.apache.axis包,https://mvnrepository.com/artifact/org.apache.axis/axis/1.4
maven引用方式:
<dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency>
import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class axis { public static String axis1(String user, String password) { Object ret = null; try { //调用webservice地址 String url = "xxxxxxxxx?wsdl"; //调用方法名 String method = "xxxxxxx"; Service service = new Service(); //通过service创建call对象 Call call = (Call) service.createCall(); //设置服务地址 call.setTargetEndpointAddress(new java.net.URL(url)); //设置调用方法 call.setOperationName(method); call.setUseSOAPAction(true); //添加方法的参数,有几个添加几个 //inLicense是参数名,XSD_STRING是参数类型,IN代表传入 call.addParameter("参数名",org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); call.addParameter("参数名", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); //设置返回类型 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING); try { //使用invoke调用方法,Object数据放传入的参数值 ret = call.invoke(new Object[] { user, password }); } catch (Exception e) { e.printStackTrace(); } //输出返回信息 System.out.println("result===" + ret.toString()); } catch (Exception e) { e.printStackTrace(); } return ret.toString(); } } 作者:你笑时很美丶 链接:https://www.jianshu.com/p/cde5ae792cbe 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
三、下面这个是我整合的部分:【另外大家需要httppost的请求方式的话,戳留言】
public static void httpPost(String url,String operationType,Object object) { try { try { Object ret = null; String namespace = "http://tempuri.org/"; //调用方法名 String method = "Method"; String soapActionURI = "http://tempuri.org/Method"; Service service = new Service(); //通过service创建call对象 //设置服务地址 Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(url)); call.setUseSOAPAction(true); call.setSOAPActionURI(soapActionURI); //设置调用方法 call.setOperationName(new QName(namespace, method)); //添加方法的参数,有几个添加几个 call.addParameter(new QName(namespace,"a参数"),org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); call.addParameter(new QName(namespace,"b参数"),org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); //设置返回类型 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING); //使用invoke调用方法,Object数据放传入的参数值 try { ret = call.invoke(new Object[] {"a参数","b参数"}); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } //输出返回信息 System.out.println("result===" + ret.toString()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ServiceException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
最后一篇:java调用C# webService发布的接口
希望对各位码鸟的疑惑有所帮助