WebService与XFire
?1、WebService与XFire简介
?????? WebService即分布式开发,是将一个完整的项目拆分为多个项目,分别完成前台部分(VC)和后台部分(M),各个项目之间是单独存在的,可以单独部署。? ??????在这里XML的语法格式是由w3c制订好的,语法为WSDL,之间的传输协议为SOAP。? ???? 这里先不使用Spring框架,先单独使用Hibernate完成后台项目,Struts2完成前台项目? ? ? ? ? ? 在web.xml中会自动加入以下内容:
????加入Hibernate支持? ? ? 需要建立一个WebService后台的服务? ?? ? ? 这时会在项目的根目录下增加一下WebServices的目录,和一个services.xml文件: ?
?后台项目完成后,如果部署可以查看WSDL的信息:则表示后台项目完成。? ? ?在WebServiceBack中编写测试类进行测试: 测试成功后可以编写前台项目调用后台项目发布的服务接口UserService! ? |
package org.wu.xfire.test;? ?????????????? String?url = "http://localhost/WebServiceBack/services/UserService";? ????????? } |
?
建立前台项目WebServiceFront,加入Struts支持.方法同上,删除web.xml中的XFire相关内容。?
需要建立一个WebService前台的服务(Web Service Client)
?
?
?
?
生成的pojo对象属性类型为JAXBElement,使用比较麻烦,最好重新加入一些setter和getter方法,方便使用,注意getter方法必须改名。User.java
import javax.xml.bind.JAXBElement;?
import javax.xml.bind.annotation.XmlAccessType;?
import javax.xml.bind.annotation.XmlAccessorType;?
import javax.xml.bind.annotation.XmlElementRef;?
import javax.xml.bind.annotation.XmlType;?
@XmlAccessorType(XmlAccessType.FIELD)?
@XmlType(name = "User",propOrder = {?
??? "password",?
??? "userid",?
??? "username"?
})?
public class User {?
private static ObjectFactory factory = new ObjectFactory();?
??? @XmlElementRef(name = "password",namespace = "http://pojo.xfire.wu.org",type = JAXBElement.class)?
??? protected JAXBElement<String> password;?
??? @XmlElementRef(name = "userid",type = JAXBElement.class)?
??? protected JAXBElement<String> userid;?
??? @XmlElementRef(name = "username",type = JAXBElement.class)?
??? protected JAXBElement<String> username;?
??? public JAXBElement<String> getPassword() {?
??????? return password;?
??? }?
??? public void setPassword(JAXBElement<String> value) {?
??????? this.password = ((JAXBElement<String> ) value);?
??? }?
??? public JAXBElement<String> getUserid() {?
??????? return userid;?
??? }?
??? public void setUserid(JAXBElement<String> value) {?
??????? this.userid = ((JAXBElement<String> ) value);?
??? }?
??? public JAXBElement<String> getUsername() {?
??????? return username;?
??? }?
??? public void setUsername(JAXBElement<String> value) {?
??????? this.username = ((JAXBElement<String> ) value);?
??? }?
??? public String getPasswordValue() {?
return password.getValue();?
}?
public void setPassword(String value) {?
this.password = factory.createUserPassword(value);?
}?
public String getUseridValue() {?
return userid.getValue();?
}?
public void setUserid(String value) {?
this.userid = factory.createUserUserid(value);?
}?
public String getUsernameValue() {?
return username.getValue();?
}?
public void setUsername(String value) {?
this.username = factory.createUserUsername(value);?
}?
}
如果服务器端的style选择的是rpc,可以直接在前台项目中自己定义接口和pojo对象,通过XFire提供的方法直接使用。
?
?<service> ???? ?? <name>UserService</name> ??????? ?<serviceClass>org.wu.xfire.service.UserService</serviceClass> ???????? <implementationClass> ?????????????? org.wu.xfire.service.impl.UserServiceImpl ???????? </implementationClass> ????? ?<style>rpc</style> ?????? <use>literal</use> ????? ?<scope>application</scope> ?</service> |
?
在WebServiceFront项目中编写测试类进行测试:
import org.wu.xfire.hello.HelloDAOClient;?
import org.wu.xfire.hello.HelloDAOPortType;?
import org.wu.xfire.pojo.User;?
import org.wu.xfire.user.UserServiceClient;?
import org.wu.xfire.user.UserServicePortType;?
public class Test {?
public static void main(String[] args) {?
??????????? UserServicePortType userdao = new UserServiceClient().getUserServiceHttpPort();?
???????????? System.out.println(userdao.getClass().getName());?
???????????? User user = new User();?
????????????? user.setUsername("Wuzhulin");?
????????????? user.setUserid("hello");?
????????????? user.setPassword("12345");?
????????????? System.out.println(userdao.isLogin(user));?
?????? }?
}
注意,这里不支持引用传递,因此如果要前后台沟通数据,必须通过参数和返回值的形式来传递。?
而且WebService对Hibernate关系映射的支持也很差。只支持单方向的一对多或多对多关系,而且Set集合必须加入泛型。?
分页代码也不能直接返回Map了,因为WebService不支持Object类型。需要单独定义一个Page对象。?
3、XFire + Spring 开发?
Spring在开发中主要还是结合Hibernate开发。?
在WebService的开发中,主要还是使用Spring完成后台项目,用来进行服务的发布功能。
?
?
选择XFireSpringServlet来完趁服务的发布。?
加入 Spring与Hibernate支持,并在web.xml中配置Spring结合其他框架的监听器
<context-param>?
?????????? <param-name>contextConfigLocation</param-name>?
?????????? <param-value>/WEB-INF/classes/applicationContext-*.xml</param-value>?
??</context-param>?
<listener>
??????????? <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>?
</listener>
正常编写好接口与实现类,在spring中,可以直接通过bean发布服务。
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"></import>? <bean name="userService" class="org.codehaus.xfire.spring.ServiceBean">? ?????? ?? <property name="name" value="UserService"></property>? ????????? <property name="serviceClass" value="org.wu.xfire.service.UserService"></property>? ????????? <property name="serviceBean">? ???????????? <ref bean="userserviceimpl"/>? ????????? </property>? ????????? <property name="style" value="rpc"></property>? ????????? <property name="use" value="literal"></property>? ????????? <property name="scope" value="application"></property>? </bean>
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!