以前使用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. mysql导入导出无权限

    error:The MySQL server is running with the --secure-file-priv option so it cannot execute this state ...

  2. 020、Java中字母大小写转换

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  3. ej3-1优先使用静态工厂方法而非构造函数来创建对象

    背景 很早之前就已经自己翻译了,先简单的贴出来,并做一下回顾. 条款1 优先使用静态工厂方法而非构造函数来创建对象 允许客户端创建一个实例的传统方法是:提供一个公共构造函数:有另外一个必须成为每个程序 ...

  4. DNS and Bind

    DNS  :  工作在应用层 DNS 作用 :  完成域名到IP的解析过程  FQDN --> IP 例如  :  www.ifeng.com  -->  123.103.122.24 D ...

  5. HDU - 6152 Friend-Graph(暴力)

    题意:给定n个人的关系,若存在三个及以上的人两两友好或两两不友好,则"Bad Team!",否则"Great Team!". 分析:3000*3000内存100 ...

  6. UVA - 10305 Ordering Tasks(拓扑排序)

    题意:给定优先关系进行拓扑排序. 分析:将入度为0的点加入优先队列,并将与之相连的点入度减1,若又有度数为0的点,继续加入优先队列,依次类推. #pragma comment(linker, &quo ...

  7. Linux系统发现新恶意软件

    导读 安全研究人员发现了一种新的Linux恶意软件,它似乎是由中国黑客创建的,并被用作远程控制受感染系统的手段. 这个恶意软件命名为HiddenWasp,由用户模式rootkit,木马和初始部署脚本组 ...

  8. python 定义一个空集合、空字典

    s = set() #定义一个空集合 s = {} #定义一个空字典

  9. Java笔记: protected的真正含义

    关于protected关键字,即使是Java初学者也能够说出它的含义:protected修饰的成员可以被子类访问.但是这样理解并不完全准确,下面考虑它的真正含义. Java访问控制回顾 Java语言定 ...

  10. C++使用 scanf函数

    最近看了下C++,有些地方和c语言 还是不太一样的,当我在做输入一个数字的时候发现了错误.. 所以在使用scanf()的时候需要加下面这段在头文件  顶部: #define _CRT_SECURE_N ...