與RPC樣式一樣,可以在文件樣式中建立JAX-WS範例。 為此,您只需要在服務介面中更改一行。
需要將Style.DOCUMENT
用於@SOAPBinding
注釋來代替Style.RPC
。下面我們來看看:
檔案: HelloWorld.java -
@SOAPBinding(style = Style.DOCUMENT) // 它從RPC更改為 DOCUMENT
現在讓我們看一下文件樣式中JAX-WS的完整範例。開啟 Eclipse ,建立一個Java工程:jaxwsdocument,並建立4
個檔案:
前3
個檔案是為伺服器端應用程式建立的,用戶端應用程式為建立1
個檔案。
檔案:HelloWorld.java -
package com.yiibai;
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.DOCUMENT)
public interface HelloWorld{
@WebMethod String getHelloWorldAsString(String name);
}
檔案:HelloWorldImpl.java -
package com.yiibai;
import javax.jws.WebService;
//Service Implementation
@WebService(endpointInterface = "com.yiibai.HelloWorld")
public class HelloWorldImpl implements HelloWorld{
@Override
public String getHelloWorldAsString(String name) {
return "Hello World JAX-WS " + name;
}
}
檔案:Publisher.java -
package com.yiibai;
import javax.xml.ws.Endpoint;
//Endpoint publisher
public class Publisher {
public static void main(String[] args) {
Endpoint.publish("http://localhost:7788/ws/hello", new HelloWorldImpl());
}
}
如果執行Publisher類,則可能會生成以下錯誤:
Wrapper class com.yiibai.GetHelloWorldAsString is not found.
Have you run APT to generate them?
要解決此問題,請在命令提示字元下轉到當前專案的bin
目錄。然後,執行以下命令:
wsgen -keep -cp . com.yiibai.HelloWorldImpl
現在,它將生成2
個檔案:
將這些檔案貼上到com.yiibai 目錄中,然後執行Publisher 類。
如何檢視生成的WSDL?
執行Publisher 程式碼後,可以通過存取URL來檢視生成的WSDL檔案:
http://localhost:7788/ws/hello?wsdl
檔案:HelloWorldClient.java -
package com.yiibai;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class HelloWorldClient{
public static void main(String[] args) throws Exception {
URL url = new URL("http://localhost:7788/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("https://www.tw511.com/", "HelloWorldImplService");
Service service = Service.create(url, qname);
HelloWorld hello = service.getPort(HelloWorld.class);
System.out.println(hello.getHelloWorldAsString("yiibai document web service"));
}
}
執行上面用戶端程式碼,得到以下結果-
Hello World JAX-WS yiibai document web service