axis2 1.6.1 与项目整合
1、在web.xml加入如下配置
<servlet > <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet > <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
2、将axis2/WEB-INF下的modules、service和conf文件件拷至工程的WEB-INF目录下。(modules和conf可选)
把lib下的jar包拷过去
最精简jar包 参考 http://mtvwang.iteye.com/blog/506299
以下是我的项目中新加的lib
拷贝axis2-web页面文件到工程(可方便管理)
3、新加一个服务 参考 http://mtvwang.iteye.com/blog/506299
与spring整合时service.xml中这样配置
<parameter name="ServiceObjectSupplier">
org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
</parameter>
<parameter name="SpringBeanName">此处填写spring中配置的bean</parameter>
4、如果要使用axis2的后台管理功能,找到下载的war包中相关class放到部署环境中"axis2\WEB-INF\classes\org"
并在web.xml中加入AxisAdminServlet的相关配置。【注意在conf/axis2.xml中修改用户名和密码确保安全】
5、axis2客户端提供异步调用功能,从其它地方拷贝的示例,暂时未测试
import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.context.MessageContext; import org.apache.axis2.rpc.client.RPCServiceClient; public class RPCAsyncClient { public static void main(String[] args) throws Exception { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/axis2/services/myService"); options.setTo(targetEPR); Object[] opAddEntryArgs = new Object[]{}; QName opAddEntry = new QName("http://service", "getName"); serviceClient.invokeNonBlocking(opAddEntry, opAddEntryArgs, new org.apache.axis2.client.async.AxisCallback() { @Override public void onComplete() { } @Override public void onError(Exception arg0) { } } @Override public void onFault(MessageContext arg0) { } @Override public void onMessage(MessageContext mc) { // 输出返回值 System.out.println(mc.getEnvelope().getFirstElement() .getFirstElement().getFirstElement().getText()); } }); System.out.println("异步调用!"); // 阻止程序退出 System.in.read(); } }
Axis2默认把Service类中所有的public方法都发布成web service的operation(就是对外公布的ws接口)
在services.xml用如下方法可以排除不需要公开的public方法
参考http://desert3.iteye.com/blog/801339
<!-- 排除setBusiness001 --> <excludeOperations> <operation>setBusiness001</operation> </excludeOperations>