2011-04-05 43 views
0

有人可以在下面的代碼中填寫缺少的鏈接嗎?調用Web服務。需要缺少的鏈接

第一種方式:

Web服務接口文件是HappyService。

JaxWSProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 

factory.getInterceptors().add(new LoggingInInterceptor()); 
factory.getInterceptors().add(new LoggingOutInterceptor()); 

//MISSING LINK. Where does HappyService.class come from? I don't have it 
factory.setServiceClass(HappyService.class); 

factory.setAddress("http://......../happyService"); 

//Again how do I get HappyService? 
HappyService client = (HappyService) factory.create(); 

方式二:

String UrlString = "Your WSDL URL"; 
    String nameSpaceUri = "urn:Foo"; 
    String serviceName = "MyHelloService"; 
    String portName = "HelloIFPort"; 

    URL helloWsdlUrl = new URL(UrlString); 

    ServiceFactory serviceFactory = ServiceFactory.newInstance(); 

    Service helloService = 
      serviceFactory.createService(helloWsdlUrl, 
      new QName(nameSpaceUri, serviceName)); 

    //Where did dynamicproxy.HelloIF come from? This code won't compile as that file does not exist anywhere 
    dynamicproxy.HelloIF myProxy = 
      (dynamicproxy.HelloIF) 
      helloService.getPort(
      new QName(nameSpaceUri, portName), 
      dynamicproxy.HelloIF.class); 

     System.out.println(myProxy.sayHello("Buzz")); 

任何人有一個線索,在那裏這些接口類的來源以及是如何生成的,請讓我知道。它看起來像我可以做一個Web服務調用的唯一方法是手動編寫SOAP請求,我真的不想這樣做,因爲它可能會變得非常大和容易出錯。

+0

你使用Web服務框架?基於第一個例子,我認爲你使用CXF。 HappyService類必須是由CXF提供的wsdl2java任務生成的類。你沒有生成的類包嗎? – reef 2011-04-05 15:51:15

+0

我注意到你的其他問題看起來像是這個版本的早期版本。我鼓勵你編輯你現有的問題來添加更多的細節,而不是在將來打開一個新的細節。歡迎來到StackOverflow! – 2011-04-05 15:56:40

+0

不能,不能訪問生成的類。我想要做的是在全球範圍內呼叫某人的公共網絡服務。 – Julie 2011-04-05 15:58:17

回答

0

有許多工具從WSDL定義文件生成webservices Java類。

您可以嘗試JAXB,這是此任務的標準Java工具。 另一種可能性是Axis,這個級別更高。

0

您需要一個SOAP庫,例如Apache Axis2。該庫將包含用於從WSDL生成Java類的工具。您可以使用生成的代碼進行Web服務調用。

+0

所以基本上沒有辦法在飛行中生成這些類?我的意思是我想要部署一個可以運行Web服務的應用程序,只需瞭解WSDL URL即可。似乎這將是一件非常常見的事情。 – Julie 2011-04-05 16:01:17

+0

您可以想象使用Axis2在運行時生成新客戶端,並將這些新類加載到當前JVM中以調用Web服務。我從來沒有試過這樣做,甚至沒有看到過需要這樣做。您也可以嘗試編寫一個「通用」客戶端來檢查WSDL並創建對該服務的一次性調用。基本上你會做什麼SOAP庫的生成器,而不寫任何客戶端代碼到磁盤。 – 2011-04-05 16:06:32

0

根據您的第一個示例,我認爲您使用CXF框架。

該框架提供了一個名爲wsdl2java的任務,允許從WSDL文件生成類。

一旦您的類生成了,您可以在代碼中使用它們以簡單的方式調用Web服務,而無需手動構建SOAP消息。這是CXF的工作。