簡體   English   中英

如何將Java對象從客戶端傳遞到Webservice

[英]How to pass java Object from client to Webservice

您好,我是Web服務的新手,我正在嘗試將Java對象傳遞給我創建的Web服務,該服務具有一個采用Java對象的Web方法。 我在下面附上我的代碼。

Web服務類:

@WebService
public class WsTicketService {

    WsTicketStore ticketstore =  new WsTicketStore();

    @WebMethod
    public void createTicket(Ticket ticket) {
        System.out.println("Requested to store a new ticket");
        Ticket myTicket = ticketstore.storeNewTicket(ticket.getReporter(), ticket.getTopic(),ticket.getDescription(), ticket.getType(), ticket.getPriority());
        System.out.println("Ticket Stored");
    }
}

創建票證的客戶端類我想將此票證發送到上述Web服務,但在service.createTicket(Ticket)行上收到錯誤,該類型不適用於參數。

public class WsTicketManagementBackend implements TicketManagementBackend {
    HashMap<Integer, Ticket> localTicketStore = new HashMap<>();
    AtomicInteger nextId;


    WsTicketServiceService client;
    WsTicketService service;

    public WsTicketManagementBackend() {
        nextId = new AtomicInteger(1);

        this.client = new WsTicketServiceService();
        service = client.getWsTicketServicePort();
    }

    @Override
    public void triggerShutdown() {

    }

    @Override
    public Ticket createNewTicket(String reporter, String topic, String description, Type type, Priority priority) {
        Ticket ticket = new Ticket(nextId.getAndIncrement(), reporter, topic, description, type, priority);
        localTicketStore.put(ticket.getId(), ticket);
        service.createTicket(ticket);
        return (Ticket) ticket.clone();
    }

此接口由wsimport工具生成:

public interface WsTicketService {


    /**
     * 
     * @param arg0
     */
    @WebMethod
    @RequestWrapper(localName = "createTicket", targetNamespace = "http://implementation.remote.ws.backend.rz.uniba.de/", className = "de.uniba.rz.backend.ws.remote.implementation.CreateTicket")
    @ResponseWrapper(localName = "createTicketResponse", targetNamespace = "http://implementation.remote.ws.backend.rz.uniba.de/", className = "de.uniba.rz.backend.ws.remote.implementation.CreateTicketResponse")
    @Action(input = "http://implementation.remote.ws.backend.rz.uniba.de/WsTicketService/createTicketRequest", output = "http://implementation.remote.ws.backend.rz.uniba.de/WsTicketService/createTicketResponse")
    public void createTicket(
        @WebParam(name = "arg0", targetNamespace = "")
        Ticket arg0);

}

您可以嘗試發送帶有Ticket對象屬性的json字符串,然后創建它,如下所示:

createTicket(String jsonTicket){
// Instantiate a jsonObject (you can use any json library you want, I recommend PrimeFaces JSONObject)
JSONObject json = new JSONObject(jsonTicket);
// So here you make a new ticket
Ticket ticket = new Ticket();
// Set the properties of the ticket to each attribute of your json
ticket.setName(json.getString("name"));
// and so on
}

我使用JAXB通過在客戶端將Java對象編組為xml文檔,然后在Web服務器端將其編組為java對象來解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM