以前使用webservice服务都很简单,就是根据提供的wsdl接口地址,通过eclipse或者idea自动生成webservice client包,然后直接调用就可以了。这次业务提供的wsdl是需要验证soapheader的,而且通过IDE工具无法生成可以直接调用的类包,无奈只能通过其他办法来实现,通过百度,可以使用axis包来实现,具体实现过程如下:

1、需要的jar包依赖

        <dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency> <dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1.1</version>
</dependency> <dependency>
<groupId>org.apache.geronimo.bundles</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.4_1</version>
</dependency> <dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>

2、WSDL接口文档

<?xml version="1.0" encoding="utf-8"?>

<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://tempuri.org/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://tempuri.org/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="SendXMLFile">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="xmlProjectData" type="s:base64Binary"/>
<s:element minOccurs="0" maxOccurs="1" name="reportDate" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="SendXMLFileResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="SendXMLFileResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="UserSoapHeader" type="tns:UserSoapHeader"/>
<s:complexType name="UserSoapHeader">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="UserId" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="PassWord" type="s:string"/>
</s:sequence>
<s:anyAttribute/>
</s:complexType>
</s:schema>
</wsdl:types>
<wsdl:message name="SendXMLFileSoapIn">
<wsdl:part name="parameters" element="tns:SendXMLFile"/>
</wsdl:message>
<wsdl:message name="SendXMLFileSoapOut">
<wsdl:part name="parameters" element="tns:SendXMLFileResponse"/>
</wsdl:message>
<wsdl:message name="SendXMLFileUserSoapHeader">
<wsdl:part name="UserSoapHeader" element="tns:UserSoapHeader"/>
</wsdl:message>
<wsdl:portType name="DataReportServiceSoap">
<wsdl:operation name="SendXMLFile">
<wsdl:input message="tns:SendXMLFileSoapIn"/>
<wsdl:output message="tns:SendXMLFileSoapOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DataReportServiceSoap" type="tns:DataReportServiceSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SendXMLFile">
<soap:operation soapAction="http://tempuri.org/SendXMLFile" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
<soap:header message="tns:SendXMLFileUserSoapHeader" part="UserSoapHeader" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DataReportServiceSoap12" type="tns:DataReportServiceSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SendXMLFile">
<soap12:operation soapAction="http://tempuri.org/SendXMLFile" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
<soap12:header message="tns:SendXMLFileUserSoapHeader" part="UserSoapHeader" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="DataReportService">
<wsdl:port name="DataReportServiceSoap" binding="tns:DataReportServiceSoap">
<soap:address location="http://221.226.63.54:8187/DataReportService.asmx"/>
</wsdl:port>
<wsdl:port name="DataReportServiceSoap12" binding="tns:DataReportServiceSoap12">
<soap12:address location="http://221.226.63.54:8187/DataReportService.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

3、接口调用代码

public static void sendReportTest(byte[] reportData, String date){
try {
// 服务端的url,需要根据情况更改。
String endpointURL = URL;
Service service = new Service();
Call call = (Call) service.createCall();
call.setTimeout(new Integer(60000));
call.setTargetEndpointAddress(new URL(endpointURL));
call.setSOAPActionURI("http://tempuri.org/SendXMLFile");
call.setOperationName(new QName("http://tempuri.org/","SendXMLFile"));// 设置操作的名称。
// 由于需要认证,故需要设置调用的用户名和密码。
SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("http://tempuri.org/", "UserSoapHeader");
soapHeaderElement.setNamespaceURI("http://tempuri.org/");
try {
soapHeaderElement.addChildElement("UserId").setValue(USER_ID);
soapHeaderElement.addChildElement("PassWord").setValue(PASSWORD);
} catch (SOAPException e) {
e.printStackTrace();
}
call.addHeader(soapHeaderElement);
call.setReturnType(XMLType.XSD_STRING);// 返回的数据类型
call.addParameter(new QName("http://tempuri.org/","xmlProjectData"), XMLType.XSD_BASE64, ParameterMode.IN);// 参数的类型
call.addParameter(new QName("http://tempuri.org/","reportDate"), XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型
String result = (String) call.invoke(new Object[]{reportData,date});// 执行调用
// 结果信息解析
Document document = DocumentHelper.parseText(result);
Element rootElement = document.getRootElement();
Iterator iter = rootElement.elementIterator("State");
while(iter.hasNext()){
Element recordEle = (Element) iter.next();
String code = recordEle.getTextTrim();// State值
if("0".equals(code)){ //成功
Logger.getRootLogger().error("调用接口成功");
}else{ // 失败保存log
Logger.getRootLogger().error(result);
}
}
} catch (Exception e) {
Logger.getRootLogger().error("调用接口失败",e);
}
}

使用axis调用webservice接口的更多相关文章

  1. 关于使用axis调用webservice接口方法

    1.概述: 我们有时候会调用webserviec接口,我们向接口发送请求参数,从接口接收返回值. 2.形式: package client; import org.apache.axis.client ...

  2. 利用axis调用webservice接口

    一.首先把wsdl文件放入eclipse中某个项目中的src目录下 二.右键弹出webservice,然后点击webservice菜单,选中genernator client ,选择axis生成Jav ...

  3. Java调用webservice接口方法

                             java调用webservice接口   webservice的 发布一般都是使用WSDL(web service descriptive langu ...

  4. 使用axis调用WebService服务端

    由于项目中要调用其他公司的接口,研究了下axis调用webService这种方式,现将代码贴出,以备以后查阅: package com.xbq; import javax.xml.namespace. ...

  5. Java通过axis调用WebService

    上午头给了我一个任务,让我对接别的公司的webservice接口,各种百度,看的头晕脑花的,终于通了,记录一下吧. jar包奉上,http://pan.baidu.com/s/1jSchC 包含:ax ...

  6. (转)Java通过axis调用WebService

    转自:http://blog.csdn.net/wanglha/article/details/49679825 转载地址:http://www.linuxidc.com/Linux/2015-06/ ...

  7. php中创建和调用webservice接口示例

    php中创建和调用webservice接口示例   这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...

  8. 使用soapui调用webservice接口

    soapui是专门模拟调用webservice接口的工具,下面介绍下怎么使用: 1.下载soapui并安装: 2.以免费天气获取接口为例:http://www.webservicex.net/glob ...

  9. 使用JS调用WebService接口

    <script> $(document).ready(function () { var username = "admin"; var password = &quo ...

随机推荐

  1. 数据库连接需要dll

    连接oracle引用: Oracle.ManagedDataAccess.dll和Oracle.ManagedDataAccess.EntityFramework.dll, 连接sqlserver 连 ...

  2. 十五、React:简单点餐实例:知识点,html解析写法

    一.功能 从首页列表点进去,转到详情页 列表.详情从Api获取 Api列表:http://a.itying.com/api/productlist 详情:http://a.itying.com/api ...

  3. <深入理解redis>读书笔记

    chapter2 键管理与数据结构 对大多数redis解决方案而言,键的命名设计至关重要.对于管理来说,内存消耗和redis性能都与数据结构设计相关.所以对开发者而言,最好有数据结构的命名文档规范. ...

  4. SSM文件上传要点总结

    文件的上传要点: 1.表单方面:enctype="multitype/form-data" 编码方式选择混编码 input 类型采用file 2.实体类一定要进行序列化,也就是im ...

  5. 使用Nginx搭建Tomcat9集群,Redis实现Session共享

    使用Nginx搭建Tomcat9集群,Redis实现Session共享 1.tomcat准备 首先准备两个tomcat9 ,修改配置文件server.xml 如果在多个服务器上分别启动tomcat 则 ...

  6. PHP开发-模板的使用

    通过今天晚上半个多小时的赵老师对模板的介绍,大致对模板的使用.结构以及开发模板的思想有了个大致的了解. 为什么要开发模板:模板就是将PHP发过过程中使用到.需要操作的事物封装成对象.以便在使用到的时候 ...

  7. 131-PHP子类可以访问父类public修饰的类成员

    <?php class father{ //定义father类 public function cook(){ return '烹饪'; } } class son extends father ...

  8. Elasticsearch 使用集群 - 创建和查询文档

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  9. spring第9天(事务)

    依赖:spring-context,spring-jdbc(这个本身有依赖spring-tx,关于事务的),druid,mysql-connector-java,aspectjweaver五个 由于我 ...

  10. Linux课后练习(第二章命令)20200218