「java调用webservice」java调用webservice接口

博主:adminadmin 2022-12-30 01:51:07 1020

本篇文章给大家谈谈java调用webservice,以及java调用webservice接口对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

forest调用webservice

用java实现web services必须遵循两个规范,他们分别是:

 JSR 101:用于基于XML的RPC ,Remote Procedure Call、 的Java API 、Java

API for XML based RPC, JAX-RPC,

 JSR 109:实现企业Web服务。Implementing Enterprise Web services。两个规范提供了厂商的实现的一致性和互操作性需求。

JAX-RPC——Java到XML和XML到Java映射API

JAX-RPC为基于XML的远程过程调用。Remote Procedure Call、 RPC,和Java应用程序编程接口 、Java Application Programming Interface。 API, 、

 WSDL到Java和Java到WSDL映射,例如、将WSDL端口类型映射到Java服

务端点接口 ,Java Service Endpoint Interface、 SEI。 。

 XML数据类型到Java数据类型和Java数据类型到XML数据类型映射。包括简

单类型、复杂类型和数组。

除了XML映射之外, JAX-RPC还定义了服务器端编程模型和API。 AX-RPC 1. 1根据Web 服务互操作性组织、Web Services Interoperability organization、 WS-I。基本概要版本1.0 、Basic Profile version 1.0,添加了互操作性需求。

JSR 109——J2EE环境的API

JSR 109指定了Java 2 Enterprise Edition ,J2EE、环境的Web服务编程模型和体系结构。 JSR 109构建在SOAP 1. 1和WSDL 1. 1的基础上、它涵盖了J2EE环境中JAX-RPC 的使用, 图2, 。它还定义了J2EE应用程序服务器中的部署模型。 JSR 109的客户端编程模型符合JAX-RPC。

JAX-RPC 1. 1和JSR 109是J2EE 1.4的组成部分。

1/7页

在这里我不准备描述用java如何实现服务端,仅描述如何用java作为客户端如何调用web services。

获取客户端服务

Java客户端有两种获取方式、一种是基于容器管理的、一种不是基于容器管理的。基于容器管理的、可以是不同类型的J2EE容器管理的客户机,

 应用程序客户机容器客户机

 Web容器客户机。 JavaBean或Servlet

 EJB容器客户机、 EJB

他们通过jndi查找服务。一般是两个步骤:

1,实例化本地JND I上下文。

2、在此上下文中对Web服务进行JND I查找。

Context ic = new InitialContext() ;

Service service = (Service) ctx. lookup("java:comp/env/service/HelloService") ;然后可以使用获得的服务接口 。Service Interface,来获取静态存根、动态代理或DII Call对象,来实现我下面描述的三种调用方式。

不是基于容器管理的、就是在本地通过java程序直接调用服务的,服务查找是通过JAX-RPC ServiceFactory进行的、 JAX-RPC ServiceFactory是创建服务访问点的工厂,可以如下进行使用获取服务。javax.xml.rpc.Service service =

ServiceFactory.newInstance() .createService(. . . ) ;

我在下面描述的客户端获取方式都是基于不是容器管理的。java调用webservices

用java作为客户端调用webservices主要有三种方式,下面描述三种调用方式。

1.DLL 、Dynamic Invocation Interface,调用

复杂度最高。灵活性最强的调用方式

通过自己创建Call对象完成调用,此方法的步骤如下,

2/7页

1. 获取一个JAX-RPC Service 。

2. 使用JAX-RPC Service的createCall ()方法实例化JAX-RPC Call 。

3. 使用它的setter方法来配置您的Call实例。

4. 使用JAX-RPC Call的调用方法来调用Web服务的操作。

String namespace = "";

String portName = "Hello";

QName portQN = new QName"(namespace, "portName) ;

String operationName = getGreeting ;

Call call = service.createCall () ;call. setPortTypeName(portQN) ;call. setOperationName(new QName(namespace, operatio"n"Name) ) ;call. setProperty(Call.ENCODINGSTYLE_URI_PROPERTY, ) ;call. setProperty(Ca"ll.OPER"ATION_STYLE_PROPERTY, "wrapped") ;call.addParameter( param1 , xsd:string,ParameterMode. IN) ;call. setReturnType(xsd:string) ;

Object[] inParams = new Object[] {"Jane"} ;

String ret = (String) call. invoke(inParams) ;

使用DII Call接口的优势在于,客户机可以调用远程过程而无需知道开发时的WSDL URI或Web服务操作的签名。这样当Web服务的细节改变时、很容易对代码进行修改。使用DII客户机,不需要像动态代理或静态存根的情形那样由从WSDL到Java的映射工具。Emitter,生成运行时类。然而,如果您知道您想要调用的 Web服务不可能更改,就应该使用动态代理。 因为配置Call实例可能很复杂。

我以调用一个axis的webservices为例说明DLL如何调用。

编写服务端程序Hello package com. lion. service public class Hello {public String sayHello(String name)

{return "hello "+name;

}

}

将上面的程序发布成一个web服务。在web-info\server-config.wsdd文件添加下列描述,service name="Hel"lo" provide"r="java":RPC"

parameter name= className value= com. lion. service .Hello"/

parameter name="allowedMethods" value=" sayHello "/

/service

客户端调用程序如下TestHelloClient. java,import org.apache.axis.client.Call ;

3/7页

import org.apache.axis.client.Service;import javax.xml.namespace.QName;import javax.xml.rpc.ServiceException;import java.net.MalformedURLException;import java.rmi.RemoteException;public class TestHelloClient{public static void main(String[] args) {try {

String endpoint = " ";

Service service = new Service() ;

Call call = null;call = (Call) service.createCall () ;call. setTargetEndpointAddress(new java.net.URL(endpoint) ) ;

//为Call设置服务的位置call. setOperationName( “sayHello” ) ;

String res = (String)" call. invoke(new"Object[] {"lion"} ) ;

System.out.println( return value is + res) ;

} catch (Exception ex) {ex.printStackTrace() ;

}

}

}

2.使用动态代理,Dynamic Proxy、调用

复杂度中等、灵活性中等的调用方式

您可以使用代理从JAX-RPC Service中调用Web服务的操作。代理是实现SEI (服务端点接口 Service Endpoint Interface)的Java类。获得代理使用的是JAX-RPC Service 的getPort()方法,它接受您想要调用的Web服务的端口的名称,存在于WSDL文档中。以及代理实现的SEI。它之所以称为动态是因为该代理是在运行时创建的。动态代理客户机的步骤如下、

1. 获取一个JAX-RPC Service 。

2. 使用JAX-RPC Service的getPort()方法来获得一个代理以调用Web服务的操

作。

String namespace = "";

String portName = "Hello";

QName portQN = new QName(namespace, portName) ;

4/7页

Hello myProxy = service.getPort(portQN, Hello.class) ;

System.out.println(myProxy.getGreeting("Jane") ) ;

这是所有您为了使用动态代理方法调用Web服务而需要编写的代码。使用这种方法的优势在于您可以编写可移植的、厂商无关的代码。然而、您需要知道开发时的WSDL URL、并且需要在运行之前根据WSDL文档运行您的从WSDL到Java的映射工具。如果您没有这方面的信息,或者WSDL URL很可能改变、那么您应该改为使用DII方法。

仍以上面发布的hello服务为例子。下面是动态代理的调用代码。

编写客户端代理接口

//这里声明的方法一定要和服务端程序的方法名称和参数相同。最好类名也一样//而且必须继承java.rmi.Remote接口public interface HelloClientInterface extends java.rmi.Remote {public String sayHello (String name) throws java.rmi.RemoteException;}

编写并执行客户端程序TestHelloClient. java import javax.xml.rpc.Service;import javax.xml.rpc.ServiceFactory;import java.net.URL;import javax.xml.namespace.QName;public class TestHelloClient {public static void main(String[] args) {try

{

String wsdlUrl = " ";//wsdl描述

String nameSpaceUri = " ";//wsdl描述里面的服务命名空间

String serviceName = "HelloService";// wsdl描述里面发布的服务名称

String portName = "Hello";//wsdl描述里面面发布的服务里面的port名称

ServiceFactory serviceFactory = ServiceFactory.newInstance() ;

Service afService = serviceFactory.createService(new URL(wsdlUrl) ,new QName(nameSpaceUri, serviceName) ) ;

HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUr"i, portName) , Hel"loClientInterface."clas"s) ;

System.out.println( return value is +proxy. sayHello( lion ) ) ;

}catch(Exception ex)

{ex.printStackTrace() ;

}

java如何调用webservice接口?

Java通过WSDL文件来调用webservice直接调用模式如下:

import java.util.Date;

import java.text.DateFormat;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import javax.xml.namespace.QName;

import java.lang.Integer;

import javax.xml.rpc.ParameterMode;

public class caClient {

public static void main(String[] args) {

try {

String endpoint = "";

//直接引用远程的wsdl文件

//以下都是套路

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(endpoint);

call.setOperationName("addUser");//WSDL里面描述的接口名称

call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,

javax.xml.rpc.ParameterMode.IN);//接口的参数

call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型

String temp = "测试人员";

String result = (String)call.invoke(new Object[]{temp});

//给方法传递参数,并且调用方法

System.out.println("result is "+result);

}

catch (Exception e) {

System.err.println(e.toString());

}

}

}

Java调用webservice和postmain调用的区别

区别是WebService可以有Get、Post、Soap、Document四种方式调用。

我们可以把webservice看做是web服务器上的一个应用,web服务器是webservice的一个容器。通过wximport生成代码。通过客户端编程方式。

通过URLConnection方式调用。

java调用webservice

String endpoint="";

String id = "11111";

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL(endpoint));

call.setOperationName("webservice方法名");

String res = (String) call.invoke(new Object[] {id});

看了你的描述觉得你把webservice想得太复杂化了,其实就是一个jar包和几个类。

以上就是最简单的webservice客户端用法,和反射有点像。当然返回值不一定是String,返回的类型和格式要问服务提供方。

我用的是axis的,我不了解websphere什么的,但是webservice就是那么易用的东西。

请采纳。

java调用webservice的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java调用webservice接口、java调用webservice的信息别忘了在本站进行查找喔。