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