JAX-WS, возвращающий сложный объект из веб-сервиса - PullRequest
0 голосов
/ 02 декабря 2018

Я только начал с JAX-WS.Основываясь на этом этом коде, я просто добавил пользовательский класс (Book), который я хотел бы вернуть из веб-службы.Это работает, но у меня есть 2 вопроса:

  1. , почему функции setBookName и setBookPublisher вызываются автоматически?Это из-за соглашения об именах?Я имею в виду, если у меня есть переменная bookName, JAX-WS ищет функцию setBookName в качестве установщика (и для getBookName в качестве получателя)?
  2. почему эти две функции называютсядважды ?Запустив приложение, я получаю следующий вывод:

    Hello World JAX-WS mkyong

    Установка имени книги в 'JAX-WS-Tutorial'

    Установка bookpublisher на 'Myself'

    Установка имени книги в «JAX-WS-Tutorial»

    Установка книги в «Myself»

    Получение названия книги: JAX-WS-Tutorial, издатель: Myself

Book.java:

package com.mkyong.ws;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement( name = "Book" )
public class Book {

  private String bookName;
  private String bookPublisher;

  public Book() {
    this.bookName = "JAX-WS-Tutorial";
    this.bookPublisher = "Myself";
  }


  public void setBookName(String bookName) {
    this.bookName = bookName;
    System.out.format("\nSetting bookname to '%s'\n",  bookName);
  }


  public String getBookName() {
    return this.bookName;
  }


  public void setBookPublisher(String bookPublisher) {
    this.bookPublisher = bookPublisher;
    System.out.format("\nSetting bookpublisher to '%s'\n",  bookPublisher);
  }

  public String getBookPublisher() {
    return this.bookPublisher;
  }
}

HelloWorld.java:

package com.mkyong.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

//Service Endpoint Interface
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld{
  @WebMethod String getHelloWorldAsString(String name);
  @WebMethod Book getBook();
}

HelloWorldClient.java:

package com.mkyong.client;

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.mkyong.ws.HelloWorld;

public class HelloWorldClient{

  public static void main(String[] args) throws Exception {
    URL url = new URL("http://localhost:9999/ws/hello?wsdl");

    //1st argument service URI, refer to wsdl document above
    //2nd argument is service name, refer to wsdl document above
    QName qname = new QName("http://ws.mkyong.com/", "HelloWorldCodeService");

    Service service = Service.create(url, qname);

    HelloWorld hello = service.getPort(HelloWorld.class);

    System.out.println(hello.getHelloWorldAsString("mkyong"));

    System.out.format("\nGet book name: %s,  publisher: %s\n", hello.getBook().getBookName(), hello.getBook().getBookPublisher());
  }

}

HelloWorldCode.java:

package com.mkyong.ws;

import javax.jws.WebService;

//Service Implementation
@WebService(endpointInterface = "com.mkyong.ws.HelloWorld")
public class HelloWorldCode implements HelloWorld {

  private Book book;


  public HelloWorldCode() {
      this.book = new Book();
  }

  @Override
  public String getHelloWorldAsString(String name) {
      return "Hello World JAX-WS " + name;
  }

  @Override
  public Book getBook() {
      return this.book;
  }
}

HelloWorldPublisher.java:

package com.mkyong.endpoint;

import javax.xml.ws.Endpoint;
import com.mkyong.ws.HelloWorldCode;

//Endpoint publisher
public class HelloWorldPublisher{

  public static void main(String[] args) {
     Endpoint.publish("http://localhost:9999/ws/hello", new HelloWorldCode());
  }

}
...