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

news2024/11/26 8:41:12

本文分两部分介绍如何在 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,可以看到:

port.png

  • tomcat webSerivces 样例 scratch_tomcat9.war

二、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/875751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis辅助功能

一、Redis队列 1.1、订阅 subscribe ch1 ch2 1.2 publish:发布消息 publish channel message 1.3 unsubscribe: 退订 channel 1.4 模式匹配 psubscribe ch* 模糊发布&#xff0c;订阅&#xff0c;退订&#xff0c; p* <channelName> 1.5 发布订阅原理 订阅某个频道或…

【正点原子STM32连载】第五章 APM32基础知识入门摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第五…

电脑提示数据错误循环冗余检查怎么办?

有些时候&#xff0c;我们尝试在磁盘上创建分区或清理硬盘时&#xff0c;还可能会遇到这个问题&#xff1a;数据错误循环冗余检查。这是如何导致的呢&#xff1f;我们又该如何解决这个问题呢&#xff1f;下面我们就来了解一下。 导致冗余检查错误的原因有哪些&#xff1f; 数据…

使用AT命令操作Modem 3G/4G模块

1. 引言 AT命令是一种通信协议&#xff0c;用于控制和配置各种设备&#xff0c;尤其在通信领域中具有重要性。它的名称来源于"ATtention"&#xff08;注意&#xff09;&#xff0c;因为命令通常以"AT"开头。AT命令最早被用于调制解调器&#xff0c;用于与…

驱动阿托斯DLHZO-T伺服比例阀放大器定制

DLHZO-T型伺服比例换向阀&#xff0c;直动式&#xff0c;带LVDT位置传感器和阀芯零遮盖&#xff0c;可应用于各种位置闭环控制实现最佳的性能。 比例阀和模块式数字放大器配合使用。 LVDT传感器和阀套结构可确保非常高的调节精度和响应灵敏度。 失电保护位可实现在电源中断的…

一文读懂3D开发工具HOOPS SDK

近年来&#xff0c;随着对定制软件开发需求的增加&#xff0c;我们也目睹了新的软件开发工具和技术的加入。 大部分企业在移动和Web应用程序开发上投入了大量的精力&#xff0c;这表明市场对技术软件解决方案的需求在增加。然而&#xff0c;在开发软件的过程中&#xff0c;是可…

基于 SIFT 和 RANSAC 算法对高分辨率图像进行图像伪造检测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

kafka基本概念及操作

kafka介绍 Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的 &#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各…

技术解析丨主轴自动换刀系统是如何工作的?有哪些优点?

一、主轴气动自动换刀系统原理 1.当加工过程中需要更换主轴上的刀具时&#xff0c;操作人员通过控制系统发出换刀指令。 2.控制系统根据指令向气动系统发送动作信号&#xff0c;驱动气动马达带动换刀机构运动。 3.换刀机构中的刀具夹持器将现有刀具从主轴上取下&#xff0c;…

FreeRTOS(事件组)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、事件的概念与应用 1、事件的概念 2、事件的应用 二、事件的运作机制 1、FreeRTOS中事件组的句柄 2、FreeRTOS 任务间事件标志组的实现 3、FreeRTOS 中断方式事件标志组的实现…

vue2学习:reduce方法和computed计算属性用法

reduce reduce可以遍历集合并将集合所有的值汇总为一个。 第一个参数是一个回调函数&#xff0c;函数第一个参数是汇总起来的最终值&#xff0c;默认是集合的第一项&#xff0c;函数第二个参数是集合遍历出来的集合元素&#xff1b; 第二个参数可以指定回调函数中第一个参数汇…

62、华为昇腾开发板Atlas 200I DK A2配置mmpose的hrnet模型推理python/c++

基本思想&#xff1a;适配mmpose模型&#xff0c;记录一下流水帐&#xff0c;环境配置和模型来自&#xff0c;请查看参考链接。 链接: https://pan.baidu.com/s/1IkiwuZf1anyKX1sZkYmD1g?pwdi51s 提取码: i51s 一、转模型 (base) rootdavinci-mini:~/sxj731533730# atc --mo…

优测云服务平台|【压力测试功能升级】轻松完成压测任务

一、本次升级主要功能如下&#xff1a; 1.多份报告对比查看测试结果 2.报告新增多种下载格式 Word格式Excel格式 3.新增多种编排复杂场景的控制器 漏斗控制器并行控制器事务控制器仅一次控制器分组控制器集合点 4.新增概览页面&#xff0c;包含多种统计维度 二、报告对比…

智慧工地源码,互联网+建筑工地,基于微服务+Java+Spring Cloud +Vue+UniApp开发

基于微服务JavaSpring Cloud VueUniApp MySql开发的智慧工地云平台源码 智慧工地概念&#xff1a; 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;然后以物联网、移动互联网技术为基础&#xff0c;充分应用BIM、大数据、人工智能、移…

DoorGym:开源的可拓展的开门仿真环境,用于域随机化的强化学习、深度强化学习

0.概述 目的&#xff1a;创建一个可以改变门把手形状、类型、位置、环境颜色、照明条件、机械臂结构的仿真环境&#xff0c;以训练出鲁棒性更高、更能关注到任务本质特征、容易迁移到现实的模型 网址&#xff1a;环境下载&#xff0c; 1.领域随机化DR 假设很难对目标域进…

在Visual Studio上,使用OpenCV实现人脸识别

1. 环境与说明 本文介绍了如何在Visual Studio上&#xff0c;使用OpenCV来实现人脸识别的功能 环境说明 : 操作系统 : windows 10 64位Visual Studio版本 : Visual Studio Community 2022 (社区版)OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版) 实现效果如图所示&#xff0…

SAP SM30 自动带出描述实现

需求&#xff1a; 在SM30中维护销售订单类型的时候&#xff0c;根据维护的销售订单类型自动带出订单类型描述 事务码&#xff1a; SE11 进入表维护生成器中 创建事件 选择【维护事件】: 05 自定义子例程&#xff1a; SET_DESCRIPTION 点击编辑器按钮进行代码编辑 具体代码…

浅学实战:探索PySpark实践,解锁大数据魔法!

文章目录 Spark和PySpark概述1.1 Spark简介1.2 PySpark简介 二 基础准备2.1 PySpark库的安装2.2 构建SparkContext对象2.3 SparkContext和SparkSession2.4 构建SparkSession对象2.5 PySpark的编程模型 三 数据输入3.1 RDD对象3.2 Python数据容器转RDD对象3.3 读取文件转RDD对象…

【力扣每日一题】1572. 矩阵对角线元素的和 8.11打卡

文章目录 题目思路代码 题目 1572. 矩阵对角线元素的和 难度&#xff1a; 简单 描述&#xff1a; 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 返回合并后的二叉树。 注意…

(leecode)密码检查

有点感觉&#xff0c;试试看~ 先贴解法&#xff0c;再说题目和思路 题解 #include <stdio.h> #include <string.h> #include <ctype.h>int main() {int N 0;scanf("%d",&N);getchar();while(N--) {char str[101] {0};scanf("%s&…