java调用webservice的.asmx接口的使用步骤

Java调用WebService的ASMX接口的使用步骤如下:

步骤1:生成Java类
在Java调用WebService接口之前,我们需要先生成Java类用于调用WebService。在传统的方式中,我们需要使用wsimport工具来生成Java类,如下所示:

wsimport -d . -keep http://localhost:8080/xxx?wsdl

这个命令会根据提供的WSDL文件,从远端WebService服务器下载相关资源并生成Java类。

步骤2:调用WebService
在生成Java类之后,我们需要调用WebService接口。Java提供了两种方式可以轻松地实现WebService的调用。

方式一:使用JAX-WS API进行调用
JAX-WS API是Java SE 6以及之后版本自带的Java API,在开发的时候无需使用第三方库就可以直接使用。使用JAX-WS API进行Java调用WebService接口的代码如下:

URL url = new URL("http://localhost:8080/xxx?wsdl");
QName qname = new QName("http://webService.xxx.com/", "xxxWebServiceImplService");
Service service = Service.create(url, qname);
xxxWebServiceService port = service.getPort(xxxWebServiceService.class);
port.xxxMethod();//调用WebService方法

在调用远程WebService方法之前需要设置Service的地址和端口,并通过该Service获取具体的WebService端口实例。

方式二:使用Apache Axis2进行调用
Apache Axis2是一个轻量级的开源Web服务框架,提供了Java调用WebService接口的实现,并在性能,稳定性上有很大优势。使用Axis2调用WebService的代码如下:

//1.创建RPCServiceClient对象并指定WebService的地址
RPCServiceClient serviceClient=new RPCServiceClient();
EndpointReference targetEPR=new EndpointReference("http://localhost:8080/xxx");
Options options=serviceClient.getOptions();
options.setTo(targetEPR);

//2.设置WebService的方法参数
Object[] objs=new Object[]{"java"};

//3.调用WebService方法并获取返回值
Class[] retTypes=new Class[]{String.class};
QName opAddEntry=new QName("http://webService.xxx.com/", "xxxMethod");
Object[] response=serviceClient.invokeBlocking(opAddEntry, objs, retTypes);
String result=(String)response[0];

在调用时需要创建RPCServiceClient对象,设置WebService的地址,方法参数以及调用WebService方法并获取返回值。

示例1:调用远程WebService方法
如下示例中,我们访问的WebService接口是一个简单的字符串拼接方法,从参数可以拼出一个完整字符串,并返回该字符串。

@WebService
public class StringService {
    @WebMethod
    public String appendString(String str1, String str2) {
        return str1 + str2;
    }
}

我们同样按照步骤1进行了Java类的生成,生成了StringService类。使用方式一的代码调用示例如下:

URL url = new URL("http://localhost:8080/StringService?wsdl");
QName qname = new QName("http://webservicesamples.com/", "StringService");
Service service = Service.create(url, qname);
StringService stringService = service.getPort(StringService.class);
//调用WebService方法
String result = stringService.appendString("Hello", "World");
System.out.println(result);

使用方式二的代码调用示例如下:

//1.创建RPCServiceClient对象并指定WebService的地址
RPCServiceClient serviceClient=new RPCServiceClient();
EndpointReference targetEPR=new EndpointReference("http://localhost:8080/StringService");
Options options=serviceClient.getOptions();
options.setTo(targetEPR);

//2.设置WebService的方法参数
Object[] paras={new String("Hello"),new String("World")};

//3.调用WebService方法并获取返回值
Class[] retType=new Class[]{String.class};
QName qname1=new QName("http://webservicesamples.com/","appendString");
Object[] results=serviceClient.invokeBlocking(qname1,paras,retType);
String result=(String)results[0];
System.out.println(result);

示例2:传输复杂参数
如下所示的WebService方法接受一个Java对象作为参数,从中获取各个属性并将这些属性拼凑成一个完整的字符串返回:

@WebService
public class ComplexService {
    @WebMethod
    public String appendString(ComplexObj obj) {
        return obj.getStr1() + obj.getStr2() + obj.getStr3();
    }
}

@XmlRootElement(name = "ComplexObj")
@XmlAccessorType(XmlAccessType.FIELD)
public class ComplexObj {
    private String str1;
    private String str2;
    private String str3;

    //getter and setter
}

我们同样按照步骤1进行了Java类的生成,生成了ComplexService类与ComplexObj类。使用方式一的代码调用示例如下:

URL url = new URL("http://localhost:8080/ComplexService?wsdl");
QName qname = new QName("http://webservicesamples.com/", "ComplexService");
Service service = Service.create(url, qname);
ComplexService complexService = service.getPort(ComplexService.class);

//构造Java对象作为WebService的参数
ComplexObj obj = new ComplexObj();
obj.setStr1("Hello");
obj.setStr2("World");
obj.setStr3("Java");

//调用WebService方法
String result = complexService.appendString(obj);
System.out.println(result);

使用方式二的代码调用示例如下:

//1.创建RPCServiceClient对象并指定WebService的地址
RPCServiceClient serviceClient=new RPCServiceClient();
EndpointReference targetEPR=new EndpointReference("http://localhost:8080/ComplexService");
Options options=serviceClient.getOptions();
options.setTo(targetEPR);

//2.构造Java对象作为WebService的参数
ComplexObj obj=new ComplexObj();
obj.setStr1("Hello");
obj.setStr2("World");
obj.setStr3("Java");
Object[] paras={obj};

//3.调用WebService方法并获取返回值
Class[] retType=new Class[]{String.class};
QName qname1=new QName("http://webservicesamples.com/","appendString");
Object[] results=serviceClient.invokeBlocking(qname1,paras,retType);
String result=(String)results[0];
System.out.println(result);

以上就是Java调用WebService的ASMX接口的完整攻略,包含了生成Java类,以及使用两种方式进行WebService调用的代码示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java调用webservice的.asmx接口的使用步骤 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • spring AOP的After增强实现方法实例分析

    Spring AOP的After增强实现方法实例分析 在Spring框架中,After增强是在被代理方法执行后执行的增强。在该增强中,我们可以对被代理方法的返回结果进行处理,或者进行资源清理等操作。本文将讲解Spring AOP的After增强实现方法,并提供两个实例来说明。 After增强定义 After增强是在被代理方法执行后执行的增强,它可以处理被代理…

    Java 2023年5月31日
    00
  • spring mvc 和ajax异步交互完整实例代码

    Spring MVC和Ajax异步交互完整实例代码 Spring MVC是一种基于Java的Web框架,它可以帮助我们快速开发Web应用程序。在Web应用程序中,Ajax异步交互是一种常见的技术,它可以帮助我们实现无需刷新页面的数据交互。本文将详细讲解Spring MVC和Ajax异步交互的完整实例代码,并提供两个示例说明。 步骤一:创建Controller…

    Java 2023年5月18日
    00
  • SpringBoot自动配置原理详解

    Spring Boot是一个非常流行的Java框架,它可以帮助开发人员快速构建基于Spring的应用程序。其中一个最重要的特性是自动配置,它可以根据应用程序的依赖关系和配置文件来自动配置应用程序。在本文中,我们将详细讲解Spring Boot自动配置的原理,并提供两个示例来演示如何使用自动配置。 Spring Boot自动配置原理 Spring Boot的自…

    Java 2023年5月15日
    00
  • 使用java打印心型、圆形图案的实现代码

    以下是使用 Java 打印心型、圆形图案的实现代码攻略。 准备工作 首先,我们需要安装 Java 编程环境。可以在 Oracle 官网 下载 JDK,并按照官方文档进行安装。安装完成后,我们需要选择一款编辑器或者 IDE 来编写代码,常用的有 IntelliJ IDEA、Eclipse、VS Code等。 打印心型图案 要打印心型图案,我们可以使用嵌套循环来…

    Java 2023年5月26日
    00
  • 一文详解如何通过Java实现SSL交互功能

    一文详解如何通过Java实现SSL交互功能 概述 本文将详细介绍如何使用Java实现SSL交互功能。SSL(Secure Sockets Layer)是一种协议,用于在两个计算机之间提供安全的通信。使用SSL可以确保数据在传输过程中的保密性和完整性,防止数据被篡改或窃取。本文将分别讲解SSL的基本概念、Java如何使用SSL协议进行通信以及如何在Java中自…

    Java 2023年5月20日
    00
  • ASP编程入门进阶(二):认识表单

    ASP编程入门进阶(二):认识表单 什么是表单? 表单是指用户通过在网页上输入信息并提交到服务器来进行处理的一种交互形式,通过表单用户可以与网站互动。 表单的基础 表单输入框 表单中最基本的元素就是输入框了,可以通过 input 标签来实现。常用的类型有文本输入框(type=”text”)、密码输入框(type=”password”)和隐藏域(type=”h…

    Java 2023年6月15日
    00
  • Java使用DateFormatter格式化日期时间的方法示例

    当我们在Java编程中需要处理时间相关的数据时,经常需要进行日期时间的格式化。Java中提供了DateFormatter类来进行日期时间的格式化,本文将详细讲解使用DateFormatter格式化日期时间的方法示例。下面按照以下步骤进行讲解: 1. 创建DateFormatter对象 在使用DateFormatter格式化日期时间之前,首先需要创建一个Dat…

    Java 2023年5月20日
    00
  • 常见的Atomic类有哪些?

    当我们使用多线程编程时,为了保证多线程程序的正确性和同步性,我们很常使用 Atomic 类型来进行操作。Atomic 类可以保证某个操作的原子性,避免数据竞争等问题。在Java中,Java.util.concurrent.atomic 包下提供了一些常见的 Atomic 类。接下来,我将会具体讲解这些 Atomic 类的使用方法和注意事项。 AtomicIn…

    Java 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部