疯狂

STANDING ON THE SHOULDERS OF GIANTS
posts - 481, comments - 486, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

JAX-WS weService实例2

Posted on 2010-01-26 22:09 疯狂 阅读(5680) 评论(0)  编辑  收藏 所属分类: webservice
上一篇http://www.blogjava.net/freeman1984/archive/2010/01/13/309387.html主要说了个jax ws cs 结构的用法 在b/s结构中的使用:
环境:myeclipse 8.0,tomcat6.0 jdk 1.5+
1,首先new 一个web project
2,添加必须的jar (bulid path):


首先建立server端:
如果客户端使用是不是用myeclipse自动生成,我们在这建立一个接口:
@WebService
public interface ServerJaxI {
 public List<User> getUser(User user);
}
当然@webServer 是必须的
接下来是实现:

@javax.jws.WebService(targetNamespace = "http://server.com/", endpointInterface="com.server.ServerJaxI", serviceName = "ServerJaxService", portName = "ServerJaxPort")
@SOAPBinding(style=Style.RPC)
public class ServerJax implements ServerJaxI{

 public List<User> getUser(User user){
  System.out.println("get User:"+user.getName());
  return UserManager.getUsers();
 }
}
其中User:

public class User implements Serializable{

 private static final long serialVersionUID = 1L;
 private String name;
 private String pwd;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPwd() {
  return pwd;
 }
 public void setPwd(String pwd) {
  this.pwd = pwd;
 }
 
}
UserManager:

public class UserManager {

 private static List<User> users;
 static{
  users = new ArrayList<User>();
  for (int i = 0; i < 10; i++) {
   User user = new User();
   user.setName("name_"+i);
   user.setPwd("pwd_"+i);
   users.add(user);
  }
 }
 public static List<User> getUsers() {
  // TODO Auto-generated method stub
  return users;
 }

}

然后我们使用myeclipse的根据bean生成webserver方法来产生配置文件:
点击项目--》new webservice 选择根据javaclass 生成:
然后就会看见 在web-info下多了sun-jaxws.xml
内容:
<?xml version = "1.0"?>
<endpoints version="2.0"
 xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
 <endpoint name="ServerJaxPort"
  implementation="com.server.ServerJax"
  url-pattern="/ServerJaxPort">
</endpoint></endpoints>
web.xml也发成了改变:被添加了相应的支持这些类都在前面添加的jar里面 如果不添加就会出现com.sun.xml.ws.transport.http.servlet.WSServletContextListener不能找到的错误。
<servlet>
   <description>JAX-WS endpoint - ServerJaxService</description>
   <display-name>ServerJaxService</display-name>
   <servlet-name>ServerJaxService</servlet-name>
   <servlet-class>
    com.sun.xml.ws.transport.http.servlet.WSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
   <servlet-name>ServerJaxService</servlet-name>
   <url-pattern>/ServerJaxPort</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <listener>
   <listener-class>
    com.sun.xml.ws.transport.http.servlet.WSServletContextListener
   </listener-class>
  </listener></web-app>
ok。现在我们部署项目启动 通过以下链接访问:htttp://localhost:8080//pro/ServerJaxPort 其中ServerJaxPort 是在sun-jaxws.xml里面定义的url-pattern 这是我们就能看见
我们发布的服务了:

客户端:
当然客户端可以通过myeclipse自动生成:我们采用不自动成的方式:也就是通过接口方式来获取(这也就是前面定义接口的原因),当然采取自动生成的方式话就不用定义接口:
当然采用接口的方式:就需要接口需要的类:
上面我们定义的接口:
@WebService
public interface ServerJaxI {
 public List<User> getUser(User user);
}
要调用这个接口就需要User 和这个接口类
 
1,首先我们new 一个java project 将ServerJaxI 和User代码拷贝过来 包名相同:
然后就是我们的客户端代码

public class Clientj {
 public static void main(String[] args) {
  try {
  URL url = new URL("http://localhost:8080/jaxws/ServerJaxPort?wsdl");//wsdl 地址
  
  QName qname = new QName("http://server.com/","ServerJaxService");  //其中第一个参数为:namespaceURI 第二个为servername
  Service service = Service.create(url, qname); 
  ServerJaxI s = service.getPort(ServerJaxI.class); 
  User user = new User();
  user.setName("qiaobing");
  System.out.println(s.getUser(user).get(1).getName());
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }
运行就可以看见结果了。
示例代码下载:
//----------------------
map讲不能得到支持
因此可以简单的封装下,(或者通过XmlAdapter<ValueType, BoundType>来封装)
例如UserMap.java:

public class UserMap{

 private HashMap<String, User> users;

 public UserMap(){
  users = new HashMap<String, User>();
 }
 public HashMap<String, User> getUsers() {
  return users;
 }

 public void setUsers(HashMap<String, User> users) {
  this.users = users;
 }
 public void put(String key,User user){
  users.put(key, user);
 }
 public User get(String key){
  return users.get(key);
 }
}

这样就可以通过UserMap来传递map数据。
服务端:
/Files/freeman1984/jaxws.rar
客户端:
/Files/freeman1984/jaxwsclient.rar


只有注册用户登录后才能发表评论。


网站导航: