以前使用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. pyhton scipy最小二乘法(scipy.linalg.lstsq模块)

    最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方之和来作为目标J(θ)J(θ),从而找到最优模型. 7. SciPy最小二乘法 最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方 ...

  2. 吴裕雄--天生自然java开发常用类库学习笔记:NumberFormat

    import java.text.* ; public class NumberFormatDemo01{ public static void main(String args[]){ Number ...

  3. 【转帖】影响超 10 亿设备,博通和 Cypress 芯片曝惊天漏洞,苹果、华为、三星等中招

    影响超 10 亿设备,博通和 Cypress 芯片曝惊天漏洞,苹果.华为.三星等中招   https://www.infoq.cn/article/lpNEQGrxZL22gHDPBE2z   26 ...

  4. use matplotlib to draw scatter plot

    There are many pionts in this kind of table. How to do it? We can use scatter() to draw it. Code: im ...

  5. js中const,val,let 的区别

    1. const定义的变量不可以修改,而且必须初始化. 2. var定义的变量可以修改,如果不初始化会输出undefined,不会报错. 3. let是块级作用域,函数内部使用let定义后,对函数外部 ...

  6. 112-PHP类变量之间的赋值标识为同一个对象(二)

    <?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...

  7. 090-PHP数组过滤函数array_filter

    <?php function odd($x){ //定义过滤偶数的函数 if($x%2==1) return TRUE; } function even($x){ //定义过滤奇数的函数 if( ...

  8. bool盲注中用到的截取字符串的函数(mid、substr、left)

    介绍一下常用的:mid.substr.left 1.mid()函数 此函数为截取字符串一部分.MID(column_name,start[,length]) 参数 描述 column_name 必需. ...

  9. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-text-width

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  10. Day 18:SequenceInputStream、合并切割mp3、对象输入输出流对象

    SequenceInputStream用例题讲述用法 需求:1.把a.txt与b.txt 文件的内容合并 2.把a.txt与b.txt .c.txt文件的内容合并 import java.io.Fil ...