技术文章

当前位置:首页>帮助手册>技术文章

O2OA(翱途) o2server 调用 webServices jaxws 服务调用样例

时间:2023-08-14   


本文分两部分介绍如何在 o2server 服务器中调用 webServices(jaxws)服务.

第一部分介绍如何在tomcat上搭建一个webServices(jaxws)服务.

第二部分介绍如何在o2server服务器上来调用上面创建的服务.

一、在tomcat上搭建一个webServices服务

介绍如何编写托管在 Apache Tomcat 服务器上运行的 Java XML Web 服务 (JAX-WS) 的 Java Web 应用程序.本教程重点介绍使客户端能够访问部署在 Tomcat 上的 Web 服务的项目配置.

请将以下依赖项添加到项目的 pom.xml 文件中:

    <dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.3.2</version>
    </dependency>

创建一个简单的 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>


将以下 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,可以看到:

port.png

二、o2server调用webServices(jaxws)

2.1 在流程中的"服务调用"活动中调用webService(jaxws)

invoke.png

填入以下参数

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)的配置.

     流程运行至服务调用活动后服务端可以看到输出日志:

invoke_response.png

这样就正确的调用到了webServices(jaxws).

2.2  在脚本中调用soap(jaxws)方法访问webServices(jaxws)

我们同样可以在脚本中调用webServices(jaxws)服务,系统已经注入了服务对象以方便webServices(jaxws)调用.

在事件中通过调用this.services()对象可以获得调用webServices(jaxws)的封装对象.

scirpt_soap.png

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])

流程运行至脚本所在的事件后可以看到输出日志:

soap_response.png

这样就正确的调用到了webServices(jaxws).

在服务中soap和jaxws这两个方法是等价的.

如果对方的webServices需要一些额外的数据才可以访问,比如需要认证信息,那么可以调用带请求头参数的方法进行访问.

2.3 在脚本中通过发送xml直接调用webServices(jaxws)

特殊使用场景下也可以直接发送xml的方式来调用webServices(jaxws).

soapXml.png


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报文调用服务:

soapXml_response.png

上一篇:移动端查看系统日志

下一篇:新版考勤管理