簡體   English   中英

JAX-WS ::從獨立的Java 7 SE客戶端調用Web服務的方法

[英]JAX-WS :: ways to call a web service from a standalone Java 7 SE client

我正在嘗試獨立的JAX-WS Web服務,服務器和客戶端(意思是,不在Java EE容器內運行)。 顯示獨立服務器端的好SO帖子就是這個

對於客戶端,我發現了以下三種似乎有效的方法(使用wsimport生成客戶端存根):

public static void main(String[] args) throws Exception {
    String serviceURL = "http://localhost:9000/soap?wsdl";
    {   // WAY 1
        URL url = new URL(serviceURL);
        QName qname = new QName("urn:playground:jax-ws", "MyService");
        Service service = Service.create(url, qname);
        IHello port = service.getPort(IHello.class);
        System.out.println(port.sayHello("Long John"));
    }
    {   // WAY 2
        MyService service = new MyService();
        IHello port = service.getHelloPort();

        ((javax.xml.ws.BindingProvider) port).getRequestContext().put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serviceURL);

        System.out.println(port.sayHello("Long John"));
    }
    {   // WAY 3
        URL url = new URL(serviceURL);
        QName qname = new QName("urn:playground:jax-ws", "MyService");
        MyService service = new MyService(url, qname);
        IHello port = service.getHelloPort();
        System.out.println(port.sayHello("Long John"));
    }
}

我不知道客戶端訪問的任何其他模式或上面顯示的方式如何相互比較。

應該注意的任何其他方法或權衡取舍?

最后,經過一些實驗,我認為下面顯示的方式(從這里開始 )與我之前的三個問題相比具有明顯的優勢:

{   // WAY 4
    QName qname = new QName("urn:playground:jax-ws", "MyService");
    MyService service = new MyService(null, qname);
    IHello port = service.getHelloPort();
    BindingProvider bindingProvider = (BindingProvider) port;
    bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serviceURL);
    System.out.println(port.sayHello("John Silver"));
}

優點是:

  • WSDL 不是在運行時檢索的(為什么它應該是?它已經在代碼創建時用於創建客戶端存根)
  • 服務的URL 在存根中進行硬編碼。

暫無
暫無

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

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