一、Web Services以XML作为数据交换的标准格式,它是跨平台的应用,允许以任何方式创建Web Services,在.NET、Java平台上访问。
在Java平台创建和访问Web Service多通过Axis完成。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的。在使用Axis访问Web Service时,需要引入以下包(10个):axis-ant.jar、axis.jar、commons-discovery-0.2.jar、commons-logging-1.0.4.jar、jaxrpc.jar、log4j-1.2.8.jar、saaj.jar、wsdl4j-1.5.1.jar、activation-1.1.jar和mail-1.4.jar。
(1)访问Java创建的Web Service 在当前Java客户端应用中添加相应的10个Axis包,编写客户端程序:
/**
* @param url 接口地址
* @param xml //报文
* @return 返回的报文
*/
public static String getWSDLCall(String url, String xml){
String result = "";
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName("http://tempuri.org/", "HelloWorld"));
//需要传入参数的时候使用
//call.addParameter("xml", org.apache.axis.encoding.XMLType.XSD_DATE,
//javax.xml.rpc.ParameterMode.IN);//接口的参数
//call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
result = (String)call.invoke(new Object[]{xml});
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return result;
}
二、java调用.net开发的webservice的时候,如果大家遇到以下问题,可以参考下解决办法:
1、 出现的问题大多是因为没有引入响应的jar包,如果使用Axis的话,将以上10个包引入后应该没有什么问题
2、用java调用时总提示:faultString: 服务器未能识别 HTTP 标头 SOAPAction 的值:上网找了解决方法,最好修改的结果如下:
.net WebService代码:
在webservicenamespace后面增加:
[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]
--------------------——————————————————
3、无法识别请求元素 <GetTestQuestions xmlns=''>
解决办法:
将 call.setOperationName(new QName("", "GetTestQuestions"));
改为call.setOperationName(new QName("自己的命名空间", "GetTestQuestions"));
--------------------——————————————————
4、在传递基本数据的时候,服务端接收的参数为null
解决办法:
//需要传入参数的时候使用,name是webservice方法的参数名,XSD_STRING是参数类型,一定要严格对应 call.addParameter(new QName(XmlNamespace,"name"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
而下面这种传参数的写法,服务端获取的是null
call.addParameter("name", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
希望能够帮到大家O(∩_∩)O