瘋狂

          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 瘋狂 閱讀(5691) 評論(0)  編輯  收藏 所屬分類: webservice
          上一篇http://www.aygfsteel.com/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

          主站蜘蛛池模板: 平潭县| 瑞金市| 淮北市| 祁东县| 滦平县| 西平县| 罗城| 宿迁市| 卢龙县| 茶陵县| 靖边县| 曲周县| 林甸县| 惠安县| 新干县| 南昌市| 邳州市| 平度市| 兴隆县| 黄龙县| 卢氏县| 睢宁县| 涿州市| 马山县| 凤城市| 景洪市| 余江县| 轮台县| 高要市| 怀柔区| 隆安县| 军事| 华安县| 林芝县| 潢川县| 隆昌县| 博乐市| 东港市| 宁武县| 太仆寺旗| 大埔县|