1. 程式人生 > >(四)輸入參數與輸出類型為復雜類型的web服務

(四)輸入參數與輸出類型為復雜類型的web服務

test over 復雜 exce 都沒有 exceptio pan 消息 字符串類型

一、  服務端發布服務

  1.1  定義復雜類型:UserBean.java

package service;

public class UserBean {
    private String userId;
    private String userName;
    private String passWord;
//隱藏getset方法

  1.2  定義服務接口 :UserService.java

package service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

/** * 這是一個web服務 * @author Administrator * */ @WebService public interface UserService { /** * 獲取用戶 * @return */ @WebResult(name = "getUserResult") public UserBean getUser(); /** * 設置用戶 * @param user */ public void setUser(@WebParam(name = "userBean") UserBean user); }

  1.3  定義服務實現類

package service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService(endpointInterface="service.UserService")
public class UserServiceimpl implements UserService {

    @Override
    public UserBean getUser() {
        UserBean user = new
UserBean(); user.setPassWord("123"); user.setUserId("001"); user.setUserName("服務端返回的用戶"); return user; } @Override public void setUser(UserBean user) { if (user != null) { System.out.println("客戶端設置的用戶=" + user); } } }

  1.4  發布服務

package publish;

import javax.xml.ws.Endpoint;

import service.UserServiceimpl;

public class TestPublish {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:3030/userBean", new UserServiceimpl());
        
        System.out.println("發布成功.....");
    }
}

二、客戶端接受、發送消息到服務端

  2.1  用工具生成客戶端代碼(具體步驟參照上一章)

技術分享

  2.2  發送、接收消息

package test;

import java.rmi.RemoteException;

import service.UserBean;
import service.UserService;
import service.UserServiceProxy;

public class TestMain {
    public static void main(String[] args) throws RemoteException {
        
        
        /**
         * 獲取服務端返回的用戶
         */
        UserService userService=new UserServiceProxy().getUserService();
        UserBean user=userService.getUser();
        System.out.println(user.getUserId()+"\t"+user.getUserName());
        
        
        /**
         * 客戶端設置用戶
         */
        
        UserBean userbean=new UserBean();
        userbean.setUserId("2");
        userbean.setUserName("客戶端設置的用戶");
        userbean.setPassWord("123520");
        new UserServiceProxy().setUser(userbean);
        
    }
}

結果:

技術分享

技術分享

  • 註意:於普通的 Java 數據類型、JavaBean、List 而言,SOAP 服務可以完全將其處理(序列化與反序列化),這些都沒有任何問題,但對於 Map 對象而言,不能再放其他復雜類型。
  • 一般來說,參數只傳字符串類型,因為web服務可以不同語言調用的,而java復雜類型其他語言可能沒有,但是所有語言共有字符串類型。而傳遞的字符串可以將數據封裝成json/xml格式的字符串,然後客戶端接收到json/xml格式的字符串再進行解析即可。

(四)輸入參數與輸出類型為復雜類型的web服務