Axis调用Webservice添加SoupHeader

170 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

Axis是啥:

Axis全称Apache eXtensible Interaction System,是apache组织下的一个开源项目,用来做webservice开发的,有java版的实现,也有c++版的实现,其前身最早是IBM的SOAP4J,后来捐给Apache后改名Apache SOAP,也就是支持SOAP1.1的那个版本,到现在的AXIS已经是第三代了,AXIS对Apache SOAP的改进有很多,比如用SAX代替以前的DOM,增加对WSDL的支持,支持SOAP1.2等等

Webservice

WebService是一种跨编程语言和跨操作系统平台的远程调用技术。 服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!指服务端程序和客户端程序可以在不同的操作系统上运行。

XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。

SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。

WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。

Axis调用Webservice步骤:
生成客户端代码:

在这里插入图片描述

soupheader是啥:

在Web Services方法进行通信使用SOAP遵循标准的SOAP格式,该格式的一部分是在XML文档中编码的数据。XML文档包含一个Envelope根元素(由必需的Body元素和可选的Header元素构成)。Body元素由特定于消息的数据构成。可选的Header元素可以包含不与特定消息直接相关的其他信息。

添加soupheader编码实现
import org.apache.axis.client.Stub;
import org.apache.axis.message.SOAPHeaderElement;

import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPFactory;
  
    public static void axisCall() throws Throwable {
ISysWebServiceServiceLocator locator = new ISysWebServiceServiceLocator();
        ISysNewsToRMTWebService webService = locator.getISysNewsToRMTWebServicePort(new URL(wsdl));

        String namespaceURI = "http://sys.webservice.client";
      
              SOAPElement soapElement = SOAPFactory.newInstance().createElement("RequestSOAPHeader","tns",namespaceURI);
        SOAPElement soapElementUser = SOAPFactory.newInstance().createElement("user","tns",namespaceURI);
        soapElementUser.addTextNode("root");
        SOAPElement soapElementPwd = SOAPFactory.newInstance().createElement("password","tns",namespaceURI);
        soapElementPwd.addTextNode("12312");

        soapElement.addChildElement(soapElementUser);
        soapElement.addChildElement(soapElementPwd);
        SOAPHeaderElement auth = new SOAPHeaderElement(soapElement);
        ((Stub)webService).setHeader(auth);

        SysForm form = new SysForm();
        form.setCreator("123456");
        AjaxResult result = webService.findList(form);
        System.out.println(result.getMsg());
     }