微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AXIS实现WebService

AXIS实现WebService webservice里面对axis最熟悉了吧。做过一个CRM系统使用这个小编,不过还没有好好的测试一下他能 承受的压力。据说SOAP的效率不高。 结合SPRING + axis配置和使用起来都比较简单。 首先是下载axis过来咯。是apache的。 然后需要修改web.xml文件,配置axis的servlet: <!-- axis webservice --> <servlet>    <servlet-name>axis</servlet-name>    <servlet-class>     org.apache.axis.transport.http.AxisServlet    </servlet-class>    <load-on-startup>4</load-on-startup> </servlet> <!-- axis webservice filter --> <servlet-mapping>    <servlet-name>axis</servlet-name>    <url-pattern>/axis/*</url-pattern> </servlet-mapping> 增加一个wsdd文件server-config.wsdd在Webroot/WEB-INF下面: <?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalConfiguration>    <parameter name="adminPassword" value="admin"/>    <parameter name="sendxsitypes" value="true"/>    <parameter name="sendMultiRefs" value="true"/>    <parameter name="sendXMLDeclaration" value="true"/>    <parameter name="axis.sendMinimizedElements" value="true"/>    <requestFlow>     <handler type="java:org.apache.axis.handlers.JWSHandler">      <parameter name="scope" value="session"/>     </handler>     <handler type="java:org.apache.axis.handlers.JWSHandler">      <parameter name="scope" value="request"/>      <parameter name="extension" value=".jwr"/>     </handler>    </requestFlow> </globalConfiguration> <handler name="Authenticate"    type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/> <handler name="LocalResponder"    type="java:org.apache.axis.transport.local.LocalResponder"/> <handler name="URLMapper"    type="java:org.apache.axis.handlers.http.URLMapper"/> <service name="User" provider="java:RPC">    <parameter name="allowedMethods" value="*"/>    <parameter name="className"     value="com.sillycat.core.webservice.impl.JaxRpcUserService"/>    <beanMapping languageSpecificType="java:com.sillycat.core.webservice.model.IUser" qname="ns:IUser" xmlns:ns="urn:BeanService"/> </service> <transport name="http">    <requestFlow>     <handler type="URLMapper"/>     <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>    </requestFlow> </transport> <transport name="local">    <responseFlow>     <handler type="LocalResponder"/>    </responseFlow> </transport> </deployment> 其中的有些地方需要修改: <service name="User" provider="java:RPC">    <parameter name="allowedMethods" value="*"/>    <parameter name="className"     value="com.sillycat.core.webservice.impl.JaxRpcUserService"/>    <beanMapping languageSpecificType="java:com.sillycat.core.webservice.model.IUser" qname="ns:IUser" xmlns:ns="urn:BeanService"/> </service> 要改成自己的类名和包名 webservice设置一个自己的spring配置文件,配置服务端和客户端,applicationContext-webservice.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- webservice axis server --> <bean name="/user"    class="org.springframework.remoting.httpinvoker.httpinvokerServiceExporter">    <property name="service">     <ref bean="jaxRpcUserService" />    </property>    <property name="serviceInterface">     <value>com.sillycat.core.webservice.IUserManager</value>    </property> </bean> <bean name="jaxRpcUserService" class="com.sillycat.core.webservice.impl.JaxRpcUserService"/> <!-- webservice axis client --> <bean id="userManagerRemote"    class="com.sillycat.plugin.webservice.axis.AxisPortProxyfactorybean"    lazy-init="true">    <property name="serviceFactoryClass">     <value>org.apache.axis.client.ServiceFactory</value>    </property>    <property name="wsdlDocumentUrl">     <value>http://localhost/easyLife/axis/User?wsdl</value>    </property>    <property name="namespaceUri">     <value>http://localhost/easyLife/axis/User</value>    </property>    <property name="serviceName">     <value>JaxRpcUserServiceService</value>    </property>    <property name="portName">     <value>User</value>    </property>    <property name="serviceInterface">     <value>com.sillycat.core.webservice.IUserManager</value>    </property> </bean> </beans> 配置就到这里结束了。另外说说类的结构 webservice下面分别有三块 webservice/impl/ JaxRpcUserService.java   核心实现类 webservice/model         IUser.java               和外部接口决定的接口类,不能直接用自己的User对象抛给别人,都要定义接口 webservice/transformer         UserTransformer.java     接口类和内部类的转换工具 webservice         IUserManager.java        抛给别人的接口,不能直接把内部的spring bean给别人使用,接口上专门包装一 个bean webservice/axis                  客户端调用的时候使用的plugin类,放置在plugin下面吧。在接口上要注册了 IUser类                                  才能相互传递         AxisPortProxyfactorybean.java IUserManager.java类,提供给外部的接口: package com.sillycat.core.webservice; import java.util.List; import com.sillycat.core.webservice.model.IUser; public interface IUserManager { public List getAllUser(); public IUser getUser(Integer id); public void saveUser(IUser user); public void removeUser(Integer id); } JaxRpcUserService.java接口实现类,调用内部的manager完成业务逻辑: package com.sillycat.core.webservice.impl; import java.util.List; import org.springframework.remoting.jaxrpc.ServletEndpointSupport; import com.sillycat.core.model.User; import com.sillycat.core.service.UserManager; import com.sillycat.core.webservice.IUserManager; import com.sillycat.core.webservice.model.IUser; import com.sillycat.core.webservice.transformer.UserTransformer; public class JaxRpcUserService extends ServletEndpointSupport implements    IUserManager { private UserManager userManager; protected void onInit() {    userManager = (UserManager) getWebApplicationContext().getBean(      "userManager"); } public List getAllUser() {    return userManager.getAllUser(); } public IUser getUser(Integer id) {    User u = userManager.getUser(id);    IUser i = UserTransformer.transformUser2IUser(u);    return i; } public void removeUser(Integer id) {    userManager.removeUser(id); } public void saveUser(IUser i) {    User u = UserTransformer.transformIUser2User(i);    userManager.saveUser(u); } } IUser.java定义的接口,相互传递参数: package com.sillycat.core.webservice.model; import java.io.Serializable; import org.apache.commons.lang.builder.ToStringBuilder; public class IUser implements Serializable { private static final long serialVersionUID = 1993559722178981779L; private Integer id; private String name; public IUser() { } public IUser(String name) {    this.name = name; } public Integer getId() {    return id; } public void setId(Integer id) {    this.id = id; } public String getName() {    return name; } public void setName(String name) {    this.name = name; } public String toString() {    return new ToStringBuilder(this).append("name",this.name).append("id",     this.id).toString(); } } UserTransformer.java转换类,接口和内部类的转换: package com.sillycat.core.webservice.transformer; import com.sillycat.core.model.User; import com.sillycat.core.webservice.model.IUser; public class UserTransformer { public static IUser transformUser2IUser(User u) {    IUser i = new IUser();    i.setId(u.getId());    i.setName(u.getName());    return i; } public static User transformIUser2User(IUser i) {    User u = new User();    u.setId(i.getId());    u.setName(i.getName());    return u; } } AxisPortProxyfactorybean.java客户端调用时的基类: package com.sillycat.plugin.webservice.axis; import javax.xml.namespace.QName; import javax.xml.rpc.Service; import javax.xml.rpc.encoding.TypeMapping; import javax.xml.rpc.encoding.TypeMappingRegistry; import org.apache.axis.encoding.ser.BeanDeserializerFactory; import org.apache.axis.encoding.ser.BeanSerializerFactory; import org.springframework.remoting.jaxrpc.JaxRpcPortProxyfactorybean; import com.sillycat.core.webservice.model.IUser; public class AxisPortProxyfactorybean extends JaxRpcPortProxyfactorybean { protected void postProcessJaxRpcService(Service service) {         TypeMappingRegistry registry = service.getTypeMappingRegistry();         TypeMapping         mapping1 = registry.createTypeMapping();         registerBeanMapping(mapping1,IUser.class,"IUser");         registry.register("http://schemas.xmlsoap.org/soap/encoding/",mapping1);     }     protected void registerBeanMapping(TypeMapping mapping,Class type,String name) {         QName qName = new QName("urn:BeanService",name);         mapping.register(type,qName,new BeanSerializerFactory(type,qName),                         new BeanDeserializerFactory(type,qName));     } } 嘿嘿。最后单元测试一下就行了,UserManagerRemoteTest.java: package com.sillycat.core.webservice; import com.sillycat.core.webservice.model.IUser; import com.sillycat.plugin.commons.base.ServiceTestBase; public class UserManagerRemoteTest extends ServiceTestBase { protected void setUp() throws Exception {    super.setUp(); } public void testGetAddressById() {    IUserManager iUserManager = (IUserManager) appContext      .getBean("userManagerRemote");    IUser iUser = iUserManager.getUser(Integer.valueOf("1"));    assertNotNull(iUser);    System.out.println(iUser); } }                                

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐