如何在Axis2中添加SOAP头(转)

Springboot+Axis2+WebService(Springboot通过Axis2方式集成WebService) 1.导入maven依赖 <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-adb</artifactId> <version>1.7.7</version> </dependency> <dependency... 阅读详情

还是使用之前的工程

WSDL文件生成方式参照:

http://blog.youkuaiyun.com/a19881029/article/details/40194787

客户端代码生成方式参照:

http://blog.youkuaiyun.com/a19881029/article/details/40198649

最后生成的客户端代码格式如下:

MathStub.java类中的add方法有下面这一段代码:

......
//其它构造函数最终都是调用这个函数创建MathStub对象

public MathStub(org.apache.axis2.context.ConfigurationContext configurationContext,
        java.lang.String targetEndpoint, boolean useSeparateListener)
        throws org.apache.axis2.AxisFault {
    populateAxisService();
    populateFaults();
    _serviceClient = new org.apache.axis2.client.ServiceClient(
            configurationContext, _service);
    _serviceClient.getOptions().setTo(
            new org.apache.axis2.addressing.EndpointReference(targetEndpoint));
    _serviceClient.getOptions().setUseSeparateListener(useSeparateListener);
    _serviceClient.getOptions().setSoapVersionURI(
            org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
}
......
public com.sean.AddResponse add(com.sean.Add add0)
        throws java.rmi.RemoteException{
......
    // adding SOAP soap_headers
    _serviceClient.addHeadersToEnvelope(env);
......
}

看了下ServiceClient的源码:

......
private ArrayList<OMElement> headers;
......
public void addHeader(OMElement header) {
    if (headers == null) {
        headers = new ArrayList<OMElement>();
    }
    headers.add(header);
}
 
/**
 * Add SOAP Header to be sent with outgoing messages.
 *
 * @param header header to be sent (non-<code>null</code>)
 */
public void addHeader(SOAPHeaderBlock header) {
    if (headers == null) {
        headers = new ArrayList<OMElement>();
    }
    headers.add(header);
}
 
/** Remove all headers for outgoing message. */
public void removeHeaders() {
    if (headers != null) {
        headers.clear();
    }
}
    
public void addStringHeader(QName headerName, String headerText) throws AxisFault {
    if (headerName.getNamespaceURI() == null || 
            "".equals(headerName.getNamespaceURI())) {
        throw new AxisFault("Failed to add string header," 
                + " you have to have namespaceURI for the QName");
    }
    OMElement omElement = OMAbstractFactory.getOMFactory()
            .createOMElement(headerName, null);
    omElement.setText(headerText);
    addHeader(omElement);
}
 
/**
 * Add all configured headers to a SOAP envelope.
 *
 * @param envelope the SOAPEnvelope in which to write the headers
 */
public void addHeadersToEnvelope(SOAPEnvelope envelope) {
    if (headers != null) {
        SOAPHeader soapHeader = envelope.getHeader();
        for (Object header : headers) {
            soapHeader.addChild((OMElement)header);
        }
    }
}

修改方式已经很明确了,在MathStub类中创建私有方法,通过AXIOM(使用版本为:1.2.14)生成所需头对象,然后将该头对象添加至ServiceClient对象即可

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.client.ServiceClient;

public MathStub(org.apache.axis2.context.ConfigurationContext configurationContext,
        java.lang.String targetEndpoint, boolean useSeparateListener)
        throws org.apache.axis2.AxisFault {
    populateAxisService();
    populateFaults();
    _serviceClient = new org.apache.axis2.client.ServiceClient(
            configurationContext, _service);
    //添加SOAP头
    this.addHeaders(_serviceClient);
    _serviceClient.getOptions().setTo(
            new org.apache.axis2.addressing.EndpointReference(targetEndpoint));
    _serviceClient.getOptions().setUseSeparateListener(useSeparateListener);
    _serviceClient.getOptions().setSoapVersionURI(
            org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
}
......
private void addHeaders(org.apache.axis2.client.ServiceClient _serviceClient){
    OMFactory omFactory = OMAbstractFactory.getOMFactory();
    OMNamespace omNS=omFactory.createOMNamespace("http://sean.com","sean");
    
    OMElement head = omFactory.createOMElement("Security", omNS);
    OMElement token = omFactory.createOMElement("Token", omNS);
    head.addChild(token);
        
    OMElement userName = omFactory.createOMElement("Username", omNS);
    userName.addChild(omFactory.createOMText(userName, "root"));
    token.addChild(userName);
        
    OMElement password = omFactory.createOMElement("Password", omNS);
    password.addAttribute(omFactory.createOMAttribute("Type", null, "PasswordText"));
    password.addChild(omFactory.createOMText(password, "123"));
    token.addChild(password);
        
    _serviceClient.addHeader(head);
}


添加SOAP头之前的请求格式如下:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
    <soapenv:Body>
        <ns1:add xmlns:ns1="http://sean.com">
            <ns1:x>1</ns1:x>
            <ns1:y>1</ns1:y>
        </ns1:add>
    </soapenv:Body>
</soapenv:Envelope>


添加SOAP头之后的请求格式如下:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
    <soapenv:Header>
        <sean:Security xmlns:sean="http://sean.com">
            <sean:Token>
                <sean:Username>root</sean:Username>
                <sean:Password Type="PasswordText">123</sean:Password>
            </sean:Token>
        </sean:Security>
    </soapenv:Header>
    <soapenv:Body>
        <ns1:add xmlns:ns1="http://sean.com">
            <ns1:x>1</ns1:x>
            <ns1:y>1</ns1:y>
        </ns1:add>
    </soapenv:Body>
</soapenv:Envelope>

                       
原文链接:https://blog.youkuaiyun.com/a19881029/article/details/41643573/

Axis2+SOAP Header验证方法实践(基于SOAP的Web安全调用机制) 基于SOAP的Web安全调用机制的第二种方法,就是Axis2+SOAP Header的方式,更简单也更直白,可控性更高。之后也对WSS4J和SOAP Header两种方法进行了简单的对比。 阅读详情

相关推荐

Axis2 Web服务端开发实战指南

本文还有配套的精品资源,点击获取 简介:Axis2是一个高效、灵活且可扩展的Web服务框架,支持SOAP和RESTful服务的构建和部署。本文将介绍Axis2的基本架构和关键组件,并详细指导如何实现Axis2服务端,包括环境准备、服务创建、WSDL文件使用、服务归档部署、测试以及如何通过模块和拦截器扩展功能。文档还可能包含关于服务生命周期、安全性、性能优化和故障排查的高级话...

weixin_35982453的博客 1347

小白轻松使用axis2构建webservice

引言: 使用axis2是来实现webservice接口是比较常见的,就我来说,如果要学一个首次接触东西,简单了解相关基础概念后,就希望自己能够简单快速的实现一个例子,在学习一门开发语言的时候,一个helloWorld例子能够快速的让你入坑,今天也来写一个小白快速入坑的helloWorld。 实现思路 下载好相关jar包; 创建web工程,给web工程的lib引入这些jar包; 书写接口实现类; 创建和配置service.xml文件,配置web.xml; 编写测试类 具体实现 获取jar包

编程界明世隐的博客 4330

Axis框架入门教程:构建和部署SOAP Web服务

本文还有配套的精品资源,点击获取 简介:本文档详细介绍了Axis框架,一款Apache旗下的开源工具,用于构建和部署基于SOAP的Web服务。内容包括Axis的核心概念、安装与配置、Web服务的创建与调用流程,以及数据绑定和安全性等技术细节。本文档旨在为Web服务开发人员提供全面的学习和实践指导,以熟练掌握Axis框架并构建高效、安全的Web服务系统。 1. Ax...

weixin_42583683的博客 1836

Axis2用法(3)soap消息携带消息头

1、消息头定义 一般soap消息中,消息体是携带消息的核心内容;消息头中的字段,多数用于校验。定义消息头,就相当于定义一个bean对象。本例中,在上一篇的继承上,为消息增加消息头,其中消息头核心内容包括三个字段:serviceId,servPassWord和timeStamp。源代码如下: package com.yht.msg.header; /** * 定义消息头中包含哪些内容的bea

yanghaitaohhh的专栏 1万+

基于ESP32的无线DMX节点设计:从Art-Net/sACN到DMX512的协议转换与实现

在舞台灯光和建筑照明控制系统中,DMX512是行业标准的数字调光协议,用于控制灯具的亮度、颜色和效果。其原理是通过RS-485差分信号串行传输512个通道的数据,每个通道对应一个控制值。然而,传统有线DMX布线复杂、成本高,在移动装置、历史建筑或临时活动中部署困难。为解决此问题,业界发展出了基于以太网的灯光控制协议,如Art-Net和sACN(E1.31),它们将DMX数据封装在UDP包中,通过网络传输。这项技术的核心价值在于实现了灯光控制的网络化与无线化,大幅提升了系统的灵活性和部署效率。其典型应用场景包

weixin_30175731的博客 229

SPSS实战:如何用Harman单因素检验搞定共同方法偏差(附完整操作步骤)

本文提供了一份详尽的SPSS实战指南,手把手教你运用Harman单因素检验来诊断共同方法偏差。文章从核心概念讲起,逐步详解数据准备、SPSS操作步骤、结果解读与报告撰写,帮助研究者快速掌握这一关键的数据质量控制方法,确保量化研究结论的可靠性。

weixin_29263201的博客 1705

如何在Axis2中添加SOAP头

通过AXIOM生成所需头对象,然后将该头对象添加至ServiceClient对象即可

怀揣梦想,努力前行 2万+

MOSFET导通电阻Rdson全解析:物理组成、公式推导与工程选型要点

在功率电子设计中,MOSFET作为核心开关器件,其导通电阻Rdson直接决定导通损耗与系统效率。从半导体物理角度看,Rdson并非单一固定值,而是由源极电阻、沟道电阻、累积层电阻、JFET区电阻、漂移区电阻及衬底电阻等多个分量串联而成,并随栅极驱动电压、结温以及击穿电压等级发生显著变化。理解Rdson的物理来源与数学表达,有助于工程师在低压大电流与高压小电流等不同场景中合理选型、优化驱动电压并准确估算热损耗。文章从沟道电阻公式出发,深入剖析耐压与导通电阻的物理矛盾、温度系数的影响规律,并给出数据手册参数的正

weixin_29163857的博客 197

在Axis2中添加SOAP头

WSDL文件生成方式参照: http://blog.youkuaiyun.com/a19881029/article/details/40194787 客户端代码生成方式参照: http://blog.youkuaiyun.com/a19881029/article/details/40198649 最后生成的客户端代码格式如下: MathStub.java类中的add方法有下面这一

三月神的专栏 4389

Arduino应用——PWM控制直流电机风扇

Arduino应用——PWM控制直流电机风扇PWM原理实验器件功能描述如何改变文本的样式插入链接与图片实现代码生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近在使用arduino UNO开发板完成课程小作业。其中一个要求设计一个电风扇控制系统,要求能够通过PWM调节风扇的转速。期间搜索了许多例程和方法,但受限于器件,效果不

hypecycle的博客 2万+

AD7920实战:从咪头到ADC的音频信号采集电路设计全解析(附电路图)

本文详细解析了基于AD7920 ADC芯片的音频信号采集电路设计全流程。从驻极体咪头的驱动、AD8542运放的两级增益与偏置设计,到关键的抗混叠滤波器配置,以及ADC接口的驱动缓冲与PCB布局要点,提供了完整的实战指南与电路图,帮助开发者实现高质量音频信号采集。

red88的博客 803

Develop Web Service With Axis2 #7 - Add Custom Soap Header in Response Soap Message

This article will talk about how to add soap headers in response soap message, not work around solution mentioned in previous article. The

Wang Xiang's Blog 1770

在 Zynq 7010 上运行 VxWorks 7.0 的详细流程【持续更新】

本文介绍了在Zynq 7010开发板上运行VxWorks 7.0的完整流程。主要包括:1)使用Vivado创建硬件设计,配置Zynq模块并生成比特流文件;2)通过Workbench 4创建VxWorks工程,配置启动参数并生成镜像;3)下载运行步骤。此外还讲解了使用Workbench 4开发VSB和VIP工程的方法,包括工程创建、配置和调试流程。文中提供了关键操作截图和注意事项,为开发者提供了完整的Zynq 7010平台VxWorks开发解决方案。

weixin_45397344的博客 1223

SOAP与AXIS2入门教程(附带实例)

最近项目需要用到SOAP以及AXIS2的知识,在学习之余,将第一天学到的内容整理了一下,一来做为笔记做个记录,二来如果有需要的,可以做为参考,今天主要是完成了一下功能,通过一个SOAP请求消息(可以自己构造也可以通过指定一个xml文件),然后在Web Service中获取这个SOAP请求消息(一个OMElement对象),通过解析这个对象,获取需要的信息,然后对这些信息进行业务处理,最后返回一个S

我的世界我的梦 1万+

WorkBuddy 连接百度网盘:能查能上传,但别指望 AI 帮你下载

本文介绍了如何通过WorkBuddy连接百度网盘实现文件管理功能。首先需要在百度开放平台创建应用并获取AppKey等凭证,然后通过拼接授权URL获取Access Token并填入WorkBuddy。实际测试表明,该连接器支持查看目录结构、搜索文件及上传文档,但无法实现文件下载和创建分享链接,原因是百度网盘MCP Server未提供相关接口。使用前需明确功能限制,该方案适合需要远程查阅网盘内容但不涉及下载的场景。

u011186532的专栏 1974

【27】软考软件设计师——数据流图(DFD)补全题满分精讲|下午15分大题深度拆解

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第27篇,深度精讲**下午案例题第1道必考大题:数据流图(DFD)补全**,该题单题分值高达**12 ~ 15分**,是整张试卷最稳的保底得分大题。我结合多年备考复盘与真题阅卷规则,超详细拆解DFD四大核心元素标准定义、机考绘图规范、三层分层逻辑、**父图子图平衡刚性扣分规则**,升级强化版「DFD满分补全三步法」;复刻历年高频真题完整流程,拆解缺失数据流定位、实体/存储辨析、平衡改错、文字需求对照全流程,配套**阅卷满分答题话术、机考避坑细则

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 592

Axis设置SOAP协议版本

现在Axis、Axis2都是同时支持SOAP1.1和SOAP1.2的。即在服务器端发布一个WebService服务之后,客户端既可以通过SOAP1.1版本来访问服务器的服务,也可以通过SOAP1.2版本来访问服务器的服务。     如果客户端不指定SOAP版本,则无论是用Axis还是Axis2编写的客户端,默认使用的都是SOAP1.1版本,如果某个服务端仅支持SOAP1.2的,则在服务的交互

dos_186的博客 2985

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Axis2關於SOAP1.1和SOAP1.2

Axis2使用的SOAP默認版本是SOAP1.1,所以如果要使用SOAP1.2最後也會試圖將其轉換為SOAP1.1的格式,而一旦此時出現版本衝突就會發生異常。 解決方法: 在客戶端設置使用的SOAP版本,通過以下方法: Options options = new Options(); options.setSoapVersionURI(SOAP12Constants.SOAP_ENVE

yuan_yuan_0000的专栏 2527

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

使用AXIS进行webservice开发-添加SOAP Header

webservice作为SOAP思想的核心,早已经广泛的应用了,但是仍然有很多人不了解webservice,甚至是没听过。WebService是B2B集成成功的关键,用WebService来实现B2B集成的最大好处在于可以轻易实现互操作性。只要把商务逻辑“暴露”出来,成为WebService,就可以让任何指定的合作伙伴调用这些商务逻辑,而不管他们的系统在什么平台上运行,使用什么开发语言。使用a

左国党的优快云博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

axis 添加 soapHeader 请求

1、axis1.4 import java.net.URL; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPException; import org.apache.axi

zj7758的专栏 5965

[Axis2]incorrect content-type for SOAP version

在Axis2插件自动生成的代码中: SOAP使用1.1版本,HTTP头中的Content-Type字段为:text/xml SOAP使用1.2版本,HTTP头中的Content-Type字段为:application/soap+xml

怀揣梦想,努力前行 3774

SOAP协议服务端编写(Axis2 XFire)

一.axis2服务端编写 1.1 web.xml配置 在web.xml中添加如下配置项: AxisServlet org.apache.axis2.transport.http.AxisServlet 1 AxisServlet /services/* 1.2 java接口与接口实现代码编写 接口: package com.hsinghsu.www; pub

Hsing Hsu's Blog 4601

axis2 默认端口_Axis2 修改 soap-address-location

Axis2修改soap-address-location(2013-07-22 16:19:48)标签:axis2修改soap-addresit初次使用axis2,面对要自定义 address location的路径,和axis2-web, index.jsp的链接,混弄了1天,幸好顺利解决。因为我的项目部署在web容器是jboss(port:8080),而外面的web容器是Apache(po...

weixin_27645199的博客 782

用axis1.3开发soap

【前言】发现我没有压力的时候就会懒,一直想总结一下之前用axis1.3开发时学到的知识,但是这件事情一直被我推到了今天。如果再不记录一下的话,我想不过多久自己都不记得怎么做了,更何况本来axis用的就不深入。目前soap的开发已经告一段落,估计以后也没有机会在做这方面了,我要去学习项目中一个高深的模块,到目前为止还是雾水。。。     其实axis1中我还是有很多没有搞懂的地方,这个总结中应该

火影的梦想 2756

利用Axis实现基于SOAP的Web Service

简介这是一篇用Java不到2周的新手写的关于利用Axis实现基于SOAP的Web Service的纪实性文章,里面不敢介绍什么SOAP,Axis,Web Service之类的理论知识,因为我至今还不是很懂这些,其中涉及到的你可能感兴趣的问题是:   1.如何用JBuilder 9写Web Service的服务器端和客户端;   2.如何发布Web Service;   3.如何解决Web Serv

波波熊的专栏 1647
上一篇: Logback 日志配置
Wo_Ai_Java
博客等级 码龄16年 26粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值