java調用webservice,java調用webservice傳遞Integer

本文目錄一覽:

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

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可以直接使用Apache提供的axis.jar自己編寫代碼,或者利用Eclipse自動生成WebService Client代碼,利用其中的Proxy類進行調用。理論上是一樣的,只不過用Eclipse自動生成代碼省事些。

1、編寫代碼方式:

package com.yudun.test;

import java.rmi.RemoteException;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.message.PrefixedQName;

import org.apache.axis.message.SOAPHeaderElement;

import com.cezanne.golden.user.Exception;

import com.cezanne.golden.user.UserManagerServiceProxy;

import javax.xml.namespace.QName;

import java.net.MalformedURLException;

import javax.xml.rpc.ServiceException;

import javax.xml.soap.Name;

import javax.xml.soap.SOAPException;

public class testWebService {

public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException

{

//標識Web Service的具體路徑

String endpoint = “WebService服務地址”;

// 創建 Service實例

Service service = new Service();

// 通過Service實例創建Call的實例

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

//將Web Service的服務路徑加入到call實例之中.

call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設置服務的位置

// 由於需要認證,故需要設置調用的SOAP頭信息。

Name headerName = new PrefixedQName( new QName(“發佈的wsdl里的targetNamespace里的url”, “string_itemName”) );

org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);

header.addTextNode( “blablabla” );

call.addHeader(header);

// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(“發佈的wsdl里的targetNamespace里的url”, “SoapHeader”);

// soapHeaderElement.setNamespaceURI(“發佈的wsdl里的targetNamespace里的url”);

// try

// {

// soapHeaderElement.addChildElement(“string_itemName”).setValue(“blablabla”);

// }

// catch (SOAPException e)

// {

// e.printStackTrace();

// }

// call.addHeader(soapHeaderElement);

//調用Web Service的方法

org.apache.axis.description.OperationDesc oper;

org.apache.axis.description.ParameterDesc param;

oper = new org.apache.axis.description.OperationDesc();

oper.setName(“opName”);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg0”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg1”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg2”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

oper.setReturnType(new javax.xml.namespace.QName(“”, “string”));

oper.setReturnClass(java.lang.String.class);

oper.setReturnQName(new javax.xml.namespace.QName(“”, “return”));

oper.setStyle(org.apache.axis.constants.Style.WRAPPED);

oper.setUse(org.apache.axis.constants.Use.LITERAL);

oper.addFault(new org.apache.axis.description.FaultDesc(

new javax.xml.namespace.QName(“發佈的wsdl里的targetNamespace里的url”, “Exception”),

“Exception”,

new javax.xml.namespace.QName(“發佈的wsdl里的targetNamespace里的url”, “Exception”),

true

));

call.setOperation( oper );

call.setOperationName(new javax.xml.namespace.QName(“發佈的wsdl里的targetNamespace里的url”, “opName”));

//調用Web Service,傳入參數

String res = ( String ) call.invoke( new Object[](“arg0″,”arg1”));

System.out.println(“===============”);

return res;

}

/**

* @param args

*/

public static void main(String[] args) {

try {

System.out.println(getResult());

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

} catch (ServiceException e) {

e.printStackTrace();

} catch (SOAPException e) {

e.printStackTrace();

}

}

}

2、利用Eclipse自動生成WebService client代碼就容易多了:(由於還不會發圖片,就用語言描述了,大家酬和看吧。。。)

首先,new project,選擇other,在輸入框中輸入Web Service Client,選中搜索後的結果,點擊Next,在Service definition中輸入 WebService的發佈地址,點擊Finish

這樣,WebService Client代碼已經生成好了。

接下來寫一個Test類,在main函數中輸入如下代碼:

String endpoint = “服務器的WebService的地址”;

YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);

try {

String resultStr = umsp.opMethod(“arg0″,”arg1”);

System.out.println(resultStr);

} catch (Exception e) {

System.out.println(“異常”);

e.printStackTrace();

} catch (RemoteException e) {

System.out.println(“RemoteException異常”);

e.printStackTrace();

}

如果還有疑問的話還有視頻,如果對你有幫助請採納!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/251019.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-13 13:31
下一篇 2024-12-13 13:32

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論