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日

相关文章

  • Java Swing程序设计实战

    Java Swing程序设计实战攻略 Java Swing程序设计实战是Java界面开发的重要书籍,其中讲解了Swing界面组件的使用、事件处理、布局管理器等内容,并有大量的编程实例。攻略分为以下几个部分: 程序设计实践 掌握Swing组件的使用,如JLabel、JTextField、JComboBox等; 学会处理Swing组件的事件,如ActionEve…

    Java 2023年5月19日
    00
  • Java最长公共子序列示例源码

    Java最长公共子序列示例源码可以用于找到两个字符串之间的最长公共子序列。以下是Java最长公共子序列示例源码的完整攻略: 1. 题目描述 给定两个字符串s1和s2,找到它们的最长公共子序列(LCS)。 2. 示例 示例1: 输入:s1 = "abcde", s2 = "ace" 输出:3 解释:最长公共子序列是 &q…

    Java 2023年5月27日
    00
  • Java正则表达式基础入门知识

    来跟你聊一聊Java正则表达式基础入门知识的攻略吧! 什么是正则表达式 正则表达式(Regex,Regular Expression),是用来描述一组字符串匹配模式的规则。 Java支持正则表达式的API是java.util.regex包。正则表达式由字符和运算符构成,用于搜索、替换和提取字符串。 常用正则表达式符号 在开始介绍正则表达式的基础知识之前,让我…

    Java 2023年5月23日
    00
  • Java线程的三种创建方式

    Java线程的创建方式一般有三种,分别是继承Thread类、实现Runnable接口和实现Callable接口。下面我们一一进行讲解。 一、继承Thread类 该方式最简单的方式就是继承Thread类,然后重写run方法,在run方法中编写线程执行的任务。 public class MyThread extends Thread { @Override pu…

    Java 2023年5月18日
    00
  • springboot使用nacos的示例详解

    Spring Boot 使用 Nacos 的示例详解 在本文中,我们将详细介绍如何在 Spring Boot 中使用 Nacos。我们将介绍 Nacos 的概念、配置和使用,并提供两个示例。 Nacos 概念 Nacos 是一个开源的动态服务发现、配置和服务管理平台。Nacos 可以帮助我们快速搭建微服务架构,并提供了许多开箱即用的功能,如服务注册、配置管理…

    Java 2023年5月15日
    00
  • 详解DES加密算法的原理与Java实现

    我会详细讲解“详解DES加密算法的原理与Java实现”的完整攻略,并包含两条示例说明。 一、DES加密算法的原理 DES是一种分组加密算法,加密时将明文分成64位一组的大小,每组的最后一位用于存储校验位。DES总共使用16个循环轮次(每轮使用一个48位的密钥子)。第一轮会将明文分成左右两部分,右部分通过跟密钥进行一个函数F运算,F函数使得输入的较小变成较大,…

    Java 2023年5月19日
    00
  • 全面了解java异常

    全面了解 Java 异常 在 Java 编程中,异常是一个不可避免的问题。当程序出现异常时,如果没有妥善的处理,会导致程序的崩溃。因此,全面了解 Java 异常是非常必要的。 什么是 Java 异常 Java 异常是指在程序运行过程中出现的错误或意外情况。Java 异常分为两种:可查异常和非可查异常。 可查异常:Java 编译器会强制程序员在代码中进行处理或…

    Java 2023年5月26日
    00
  • 浅析Java Web错误/异常处理页面

    下面是“浅析Java Web错误/异常处理页面”的完整攻略: 1. 理解错误/异常处理页面 当 Java Web 应用程序出现错误或异常时,系统会自动跳转到错误/异常处理页面,这个页面通常包含错误/异常信息,以及一些对用户或系统管理员进行解释的说明。 常见的错误/异常处理页面有两种类型: 系统默认的错误/异常处理页面 自定义的错误/异常处理页面 系统默认的错…

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