Axis,生于apache,死于apache。但由于其诞生时间早,现在仍占一席之地。
由于工作需求,现需要将一个老旧的框架进行升级与重构。其中框架里面的ws是由axis来完成的。
说实话,心里有些抵触,毕竟习惯了很多优雅的设计,再过来看Axis,有些难以适从。
所以在开发的工作当中,总会先入为主的认为错误是由于Axis导致的,而忽略了真正的原因。(这是个BUG呀)
下面简单列两条吧。共勉:
1。 axisclient连不通jax呀
package com.linpeng.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public class Hello {
@WebMethod(operationName = "getRemindInfo")
public String getRemindInfo(String requestStr) {
System.out.println("From Client PT :" + requestStr);
return "Hello " + requestStr;
}
}
就这么简单的Service。
org.apache.axis.client.Service service = new org.apache.axis.client.Service();
Call call = (Call) service.createCall();
call.addParameter(new javax.xml.namespace.QName("", "requestStr"),
new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"),
javax.xml.rpc.ParameterMode.IN);
call.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
call.setOperationName(new javax.xml.namespace.QName(request
.getParameter("namespace"), request
.getParameter("operationname")));
call.setTimeout(10000);
call.setTargetEndpointAddress(new java.net.URL(request.getParameter("wsdl")));
AuthenticatedUser user = SecurityUtil.getCurrentUser();
String requestStr = "Who";
result = call.invoke(new Object[] { requestStr });
调用也非常简单。
可是在Endpoint那边就是没收到内容。尔后改用SoapUI进行测试,以及自己写jax-client测试。发现都能拿到数据。
解决:加上@WebParam(name = "requestStr") 即可。