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日

相关文章

  • activemq整合springboot使用方法(个人微信小程序用)

    下面详细讲解“activemq整合springboot使用方法(个人微信小程序用)”的完整攻略: 一、前置条件 已安装JDK1.8+,并配置JAVA_HOME环境变量 已安装Maven 已安装ActiveMQ,并且启动了ActiveMQ服务 已创建Spring Boot项目 二、添加依赖 在pom.xml文件中添加 ActiveMQ 与 Spring Boo…

    Java 2023年5月30日
    00
  • java的Hibernate框架报错“TransientObjectException”的原因和解决方法

    当使用Hibernate框架时,可能会遇到“TransientObjectException”错误。这个错误通常是由于以下原因之一引起的: 持久化对象中包含了非持久化对象:如果您的持久化对象中包含了非持久化对象,则可能会出现此错误。在这种情况下,需要确保您的持久化对象中只包含持久化对象。 非持久化对象尝试与持久化对象建立关联:如果您的非持久化对象尝试与持久化…

    Java 2023年5月4日
    00
  • java实现留言板功能实例

    Java实现留言板功能实例 在Java Web开发中,留言板是一个常见的功能。本文将介绍如何使用Java实现留言板功能。 准备工作 首先要准备的是Java Web开发的基础知识,包括Java Servlet、JSP、HTML、CSS和数据库MySQL的使用。 创建数据库 使用MySQL创建一个名为“message_board”的数据库,其中包含一个名为“me…

    Java 2023年6月15日
    00
  • java 避免出现NullPointerException(空指针)的方法总结

    Java 避免出现 NullPointerException 的方法总结 在使用 Java 编程的过程中,我们经常会遇到空指针异常(NullPointerException),这是一种非常常见的运行时异常。下面我们来总结一下如何有效地避免空指针异常。 1. 使用 Optional 类型 Java 8 引入了 Optional 类型,可以有效地避免空指针异常。…

    Java 2023年5月27日
    00
  • SpringBoot中时间类型 序列化、反序列化、格式处理示例代码

    下面我就来为您详细讲解“SpringBoot中时间类型 序列化、反序列化、格式处理示例代码”的完整攻略。 1. 背景介绍 在实际开发中,我们经常会遇到时间类型的序列化、反序列化、格式处理问题,SpringBoot在处理时间类型时提供了很多便利,本文将介绍SpringBoot中时间类型的序列化、反序列化、格式处理示例代码。 2. 时间类型的序列化 在Sprin…

    Java 2023年5月20日
    00
  • Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 代码实践

    下面是关于“Spring Cloud Feign 自定义配置(重试、拦截与错误码处理)”的完整攻略详情。 1. 什么是 Spring Cloud Feign Spring Cloud Feign 是一个声明式 REST 客户端,它使通过 HTTP 通信的服务调用变得更加简单。 Feign 会通过定义接口的方式来注入需要访问的远程服务,这样就可以像调用本地方法…

    Java 2023年5月20日
    00
  • AJAX SpringBoot 前后端数据交互的项目实现

    理解和实现AJAX SpringBoot前后端数据交互,需要涉及到以下知识点:SpringBoot、AJAX、RESTAPI和JSON数据格式。 1. 准备工作 首先,搭建一下SpringBoot的项目环境,然后在项目中引入一些必要的依赖,如下: Spring Boot Web Spring Boot Thymeleaf(或者其他视图模板依赖) Spring…

    Java 2023年6月2日
    00
  • Spring MVC参数校验详解(关于`@RequestBody`返回`400`)

    关于Spring MVC参数校验,可以分为两种情况讨论:针对普通请求参数的校验和针对请求体中的JSON格式数据的校验。这里我们主要讲解后者,即针对@RequestBody注解返回400错误时的问题。 1. 报错原因 在开发中,当我们使用@RequestBody注解接收请求体中的JSON格式数据时,经常会遇到传入的参数格式不正确的情况,比如类型不匹配、缺失必要…

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