使用axis调用webservice接口
以前使用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接口的更多相关文章
- 关于使用axis调用webservice接口方法
1.概述: 我们有时候会调用webserviec接口,我们向接口发送请求参数,从接口接收返回值. 2.形式: package client; import org.apache.axis.client ...
- 利用axis调用webservice接口
一.首先把wsdl文件放入eclipse中某个项目中的src目录下 二.右键弹出webservice,然后点击webservice菜单,选中genernator client ,选择axis生成Jav ...
- Java调用webservice接口方法
java调用webservice接口 webservice的 发布一般都是使用WSDL(web service descriptive langu ...
- 使用axis调用WebService服务端
由于项目中要调用其他公司的接口,研究了下axis调用webService这种方式,现将代码贴出,以备以后查阅: package com.xbq; import javax.xml.namespace. ...
- Java通过axis调用WebService
上午头给了我一个任务,让我对接别的公司的webservice接口,各种百度,看的头晕脑花的,终于通了,记录一下吧. jar包奉上,http://pan.baidu.com/s/1jSchC 包含:ax ...
- (转)Java通过axis调用WebService
转自:http://blog.csdn.net/wanglha/article/details/49679825 转载地址:http://www.linuxidc.com/Linux/2015-06/ ...
- php中创建和调用webservice接口示例
php中创建和调用webservice接口示例 这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...
- 使用soapui调用webservice接口
soapui是专门模拟调用webservice接口的工具,下面介绍下怎么使用: 1.下载soapui并安装: 2.以免费天气获取接口为例:http://www.webservicex.net/glob ...
- 使用JS调用WebService接口
<script> $(document).ready(function () { var username = "admin"; var password = &quo ...
随机推荐
- Android Studio相关
1.下载安装 Android Studio 2.打开已有或是新建工程,gradle编译时候会报错(被墙),可以切换阿里的源 修改build.gradle 的配置: buildscript { repo ...
- 006.CI4框架CodeIgniter, 加载框架的helper辅助类,调用helper类中的各种函数
01. CI4框架作为一个很成熟的框架,给我们提供了很多helper辅助类,我们在代码中可以很方便的使用,如下所示,我们在Controllers中调用Cookies类的set_cookie函数 < ...
- maven package跳过测试
mvn clean package -DskipTests 或者 mvn clean package -Dmaven.test.skip=true 区别 -DskipTests,不执行测试用例,但编译 ...
- CodeForces - 755C PolandBall and Forest (并查集)
题意:给定n个数,Ai的下标为1~n.对于每一个i,Ai与i在同一个树上,且是与i最远的点中id最小的点(这个条件变相的说明i与Ai连通).求森林中树的个数. 分析:若i与Ai连通,则在同一个树上,因 ...
- a标签的超链接提交form表单
<form action="/home/search" method="get" id="search_form"><di ...
- XV6操作系统代码阅读心得(五):文件系统
Unix文件系统 当今的Unix文件系统(Unix File System, UFS)起源于Berkeley Fast File System.和所有的文件系统一样,Unix文件系统是以块(Block ...
- centos7-虚拟机 主机 互通 静态ip网络设置
由于目前互联网发展的速度之快.用户量之多,很多时候作为服务端单台服务器的硬件配置已经不足以支撑业务.集群.分布式等技术架构变得越来越普及,作为开发人员也有必要掌握相关技能.笔者打算选用virtual ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-align-justify
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- Python MySQL Select
章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...
- Mapper method 'com.xxxx.other.dao.MyDao.getNo attempted to return null from a method with a primitive return type (int)
使用myBatis调用存储过程的返回值,提示错误信息: org.apache.ibatis.binding.BindingException: Mapper method 'com.xxxx.othe ...