本文分兩部分介紹如何在 o2server 服務器中調用 webServices(jaxws)服務.
第一部分介紹如何在tomcat上搭建一個webServices(jaxws)服務.
第二部分介紹如何在o2server服務器上來調用上面創建的服務.
O2OA(翱途)官網:http://www.o2oa.net
在tomcat上搭建一個webServices服務
介紹如何編寫託管在 Apache Tomcat 服務器上運行的 Java XML Web 服務 (JAX-WS) 的 Java Web 應用程序.本教程重點介紹使客戶端能夠訪問部署在 Tomcat 上的 Web 服務的項目配置.
-
添加 JAX-WS 運行時依賴關係
請將以下依賴項添加到項目的 pom.xml 文件中:
<dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.3.2</version> </dependency>
-
創建一個簡單的 XML/SOAP Web 服務
創建一個簡單的 Java XML Web 服務類,如下所示:
package net.o2oa.scratch.tomcat9.jaxws; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebServicepublic class JaxwsEcho { @WebMethod @SOAPBinding(style = Style.DOCUMENT) public String sayHello(String name) { return "Hello, " + name + "!"; } }
配置 webServices 服務點
<?xml version="1.0" encoding="UTF-8"?><endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> <endpoint name="JaxwsEcho" implementation="net.o2oa.scratch.tomcat9.jaxws.JaxwsEcho" url-pattern="/ws/echo"/> </endpoints>
-
配置 JAX-WS 偵聽器和 Servlet
將以下 XML 代碼添加到 Web 部署描述符文件 (web.xml):
<listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class></listener> <servlet> <servlet-name>JAXWSServlet</servlet-name> <servlet-class> com.sun.xml.ws.transport.http.servlet.WSServlet </servlet-class> <load-on-startup>1</load-on-startup></servlet> <servlet-mapping> <servlet-name>JAXWSServlet</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>
-
查看接口
將以上程序進行打包,打包成scratch_tomcat9.war. 然後將文件複製到Tomcat9的webapps目錄下,啓動tomcat. 訪問http://127.0.0.1:8080/sctatch_tomcat9/ws/echo,可以看到:
-
tomcat webSerivces 樣例 scratch_tomcat9.war
o2server調用webServices(jaxws)
在流程中的"服務調用"活動中調用webService(jaxws)
填入以下參數
WSDL地址:
http://127.0.0.1:8080/scratch_tomcat9/ws/echo?wsdl
調用方法:
sayHello
參數腳本: this.parameters.add("O2OA"); 響應腳本: var txt = "webServices響應:";print(txt + this.response.get()[0]);
這樣我們就完成了調用外部webServices(jaxws)的配置.
流程運行至服務調用活動後服務端可以看到輸出日誌:
這樣就正確的調用到了webServices(jaxws).
在腳本中調用soap(jaxws)方法訪問webServices(jaxws)
我們同樣可以在腳本中調用webServices(jaxws)服務,系統已經注入了服務對象以方便webServices(jaxws)調用.
在事件中通過調用this.services()對象可以獲得調用webServices(jaxws)的封裝對象.
var ObjectArray = Java.type("java.lang.Object[]"); var param = new ObjectArray(1); param[0] = "O2OA"; var resp = this.service.soap("http://127.0.0.1:8080/scratch_tomcat9/ws/echo?wsdl", "sayHello", param);print("soap響應:" + resp[0])
流程運行至腳本所在的事件後可以看到輸出日誌:
這樣就正確的調用到了webServices(jaxws).
在服務中soap和jaxws這兩個方法是等價的.
如果對方的webServices需要一些額外的數據纔可以訪問,比如需要認證信息,那麼可以調用帶請求頭參數的方法進行訪問.
在腳本中通過發送xml直接調用webServices(jaxws)
特殊使用場景下也可以直接發送xml的方式來調用webServices(jaxws).
var xml ="<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:jax="http://jaxws.tomcat9.scratch.o2oa.net/">"; xml += "<soapenv:Header/>"; xml += "<soapenv:Body>"; xml += "<jax:sayHello>"; xml += "<arg0>張三</arg0>"; xml += "</jax:sayHello>"; xml += "</soapenv:Body>"; xml += "</soapenv:Envelope>"; var resp = this.service.soapXml("http://127.0.0.1:8080/scratch_tomcat9/ws/echo?wsdl", xml); print("soap xml 響應:" + resp[0]);
直接向服務地址發送xml報文調用服務: