axis2 webservice入門知識(JS,Java,PHP調用執行個體源碼)

來源:互聯網
上載者:User

標籤:eve   min   sdn   傳輸   方式   result   axis2   str   處理   

背景簡介

最近接觸到一個銀行介面的案子,臨時需要用到axis2 webservice。自己現學現總結的一些東西,留給新手。少走彎路。

Axis2簡介

①採用名為 AXIOM(AXIs Object Model)的新核心 XML 處理模型,利用新的XML解析器提供的靈活性按需構造物件模型。

②支援不同的訊息交換模式。目前Axis2支援三種模式:In-Only、Robust-In和In-Out。In-Only訊息交換模式只有SOAP請求,而不需要應答;Robust-In訊息交換模式發送SOAP請求,只有在出錯的情況下才返回應答;In-Out訊息交換模式總是存在SOAP請求和應答。

③提供阻塞和非阻塞用戶端 API。

④支援內建的 Web服務定址 (WS-Addressing) 。

⑤靈活的資料繫結,可以選擇直接使用 AXIOM,使用與原來的 Axis 相似的簡單資料繫結方法,或使用 XMLBeans、JiBX 或 JAXB 2.0 等專用資料繫結架構。

⑥新的部署模型,支援熱部署。

⑦支援HTTP,SMTP,JMS,TCP傳輸協議。

⑧支援REST (Representational State Transfer)。

測試環境

【jdk1.6.0】 +【tomcat-6.0.18】 + 【axis2-1.6.1】+【PHP Version 5.3.5】

未測試最低支援配置。

環境準備

一、部署Axis2環境.

1.下載安裝

apache 官網:http://ws.apache.org/axis2/ 選擇 Standard Binary Distribution 和 WAR Distribution

2.配置系統內容變數:

①添加AXIS2_HOME變數並指向 Standard Binary Distribution解壓目標目錄。例如:$AXIS2_HOME$ =D:\axis2-1.6.1;

②將axis2.bat所在目錄添加到系統內容變數path裡。例如:將 D:\axis2-1.6.1\bin添加到path現有值的最後面;

③將$AXIS2_HOME$\lib添加到系統內容變數classpath裡。例如:將D:\axis2-1.6.1\lib添加到classpath現有值的最後面。

  1. 把WAR Distribution 解壓到 $tomcat_home$\webapps\axis2下(建立axis2檔案夾),當然你也可以參照axis2文檔裡列出的步驟使用ant 建立一個axis2.war ,放到$tomcat_home$\webapps下,然後啟動tomcat ,那麼tomcat會在webapps下自動建立一個axis2檔案夾。

二、測試Axis2環境.

1.訪問 http://localhost:[port]/axis2 (請將[port]修改成你的Tomcat對應連接埠,預設為8080);進入axis2的歡迎介面了。點擊“Validate”。

如果有報錯,則需根據錯誤資訊檢查上述步驟。如果沒有錯誤資訊,那麼Axis2的環境測試算是通過了。

  1. 可以點擊“Administration” 並使用初始使用者名稱和密碼:admin ;axis2登入,可以看到System Components以及可以使用Upload Service Tools。部署新的arr檔案了。另可去$tomcat_home$\webapps\axis2\WEB-INF\conf\axis2.xml下修改使用者名稱和密碼。

建立Demo HelloWorld

一、service端開發

1.建立一個java項目

2.建立類HelloWorld.java

參考代碼:

package sample;

import org.apache.axiom.om.OMAbstractFactory;

import org.apache.axiom.om.OMElement;

import org.apache.axiom.om.OMFactory;

import org.apache.axiom.om.OMNamespace;

public class HelloWorld {

public OMElement sayHello(OMElement in){

String name=in.getText();

String info="你好"+name+",給你推薦http://www.sietoo.com";

OMFactory fac=OMAbstractFactory.getOMFactory();

OMNamespace omNs=fac.createOMNamespace("http://www.sietoo.com/","hw");

OMElement resp=fac.createOMElement("sayHelloResponse",omNs);

resp.setText(info);

return resp;

}

}

3.建立檔案META-INF \ services.xml

參考代碼:

<?xml version="1.0" encoding="UTF-8"?>

<service name="HelloWorld">

<description>

This is a sample Web Service.

</description>

<parameter name="ServiceClass" locked="false">sample.HelloWorld</parameter>

<operation name="sayHello">

<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>

</operation>

</service>

二、項目打包並發布

1.可使用你熟悉的IDE進行打包成HelloWorld.aar

參考直接打包方式:

在命令符行境下,將目前的目錄切換到該項目包下。如博主的例子就需要切換到sample所在的檔案夾,注意並非切換進sample。使用如下命令:jar cvf HelloWorld.aar . 完成在目前的目錄產生HelloWorld.aar 。請注意命令末尾的點“.”。

2.發布,使用前面提到的登入axis2後看到的Upload Service 工具 將HelloWorld.arr部署到Tomc上。

3.發布測試,如博主例子訪問http://localhost:8088/axis2/services/HelloWorld?wsdl查看第2步驟中部署的HelloWrold的描述檔案。

如果有報錯,則需根據錯誤資訊檢查上述步驟。如果沒有錯誤資訊,那麼HelloWorld的service端就算完成了。

三、簡易用戶端調用

1.一個簡單的Java調用用戶端。

參考代碼:

package example.client;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
public class TestClient {
private static EndpointReference targetEPR=new EndpointReference
("http://localhost:8080/axis2/services/HelloWorld");
public static OMElement getSayHelloOMElement(){
OMFactory fac=OMAbstractFactory.getOMFactory();
OMNamespace omNs=fac.createOMNamespace("http://www.sietoo.com/","hw");
OMElement method=fac.createOMElement("sayHello",omNs);
method.setText("andy");
return method;
}
public static void main(String[] args){
try{
Options options=new Options();
options.setTo(targetEPR);
ServiceClient sender=new ServiceClient();
sender.setOptions(options);
OMElement sayHello=TestClient.getSayHelloOMElement();
OMElement result=sender.sendReceive(sayHello);
System.out.println(result);
}
catch(Exception axisFault){
axisFault.printStackTrace();
}
}
}
編譯此檔案,並執行。

如果有報錯,則需根據錯誤資訊檢查上述步驟。如果沒有錯誤資訊,那麼Demo HelloWorld就完滿完成。

各類用戶端調用執行個體

一、java調用axis2 webservice (包括單個參數和多個參數方法的調用)
參考代碼:

package example.client;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
public class s2 {
private static EndpointReference targetEPR=new EndpointReference("http://www.sietoo.com/axis2/services/SVAMobileWebService");
public static OMElement getSayHelloOMElement(){
OMFactory fac=OMAbstractFactory.getOMFactory();
OMNamespace omNs=fac.createOMNamespace("http://www.sietoo.com","andy");

//測試調用bandMobileNo (多參數方法)
OMElement bandMobileNo=fac.createOMElement("bandMobileNo",omNs);
OMElement UserId=fac.createOMElement("UserId",omNs);
OMElement password=fac.createOMElement("password",omNs);
OMElement bindingBank=fac.createOMElement("bindingBank",omNs);
UserId.addChild(fac.createOMText(UserId, "18629078140"));
password.addChild(fac.createOMText(password, "mynewpassword"));
bindingBank.addChild(fac.createOMText(bindingBank, "622260062001991159"));
bandMobileNo.addChild(UserId);
bandMobileNo.addChild(password);
bandMobileNo.addChild(bindingBank);
return bandMobileNo;

//測試調用getAccountInfo (單參數方法)
//OMElement getAccountInfo=fac.createOMElement("getAccountInfo",omNs);
//OMElement accountNum=fac.createOMElement("accountNum",omNs);
//accountNum.addChild(fac.createOMText(accountNum, "18629078140"));
//getAccountInfo.addChild(accountNum);
//return getAccountInfo;
}
public static void main(String args[]){
try{
Options options=new Options();
options.setTo(targetEPR);
ServiceClient sender=new ServiceClient();
sender.setOptions(options);
OMElement sayHello=s2.getSayHelloOMElement();
OMElement result=sender.sendReceive(sayHello);
System.out.println(result);
}
catch(Exception axisFault){
axisFault.printStackTrace();
}}}

二、PHP調用axis2 webservice (包括調用多參數,但參數方法)

1.使用Soap調用(需要PHP的版本支援)

<?php
$wsdl=‘http://www.sietoo.com/axis2/services/SVAMobileWebService?wsdl‘;
$soap=new SoapClient($wsdl,array( ‘trace‘=>false,‘cache_wsdl‘=>WSDL_CACHE_NONE ) );
$soap=new SoapClient($wsdl);
$method="bandMobileNo";
if(isset($_POST[‘passwd‘])&&isset($_POST[‘UserId‘])&&isset($_POST[‘bindingBank‘])){
$params=array( ‘UserId‘=>$_POST[‘UserId‘],‘password‘=>$_POST[‘passwd‘],‘bindingBank‘=>$_POST[‘bindingBank‘]);
try{
$result=$soap->$method($params);
echo$result->return;
echo‘<br>‘;
}catch(SoapFault $e){echo $e->getMessage();}
}
?>
<html>
<head>
<title>bandMobileNo</title>
</head>
<body>
<form method="Post" action="">
<p>tel.
<input type="text" name="UserId" value="18629078888"/>
</p>
<p>pwd.
<input type="password" name="passwd" value="admin" />
</p>
<p>cardno.
<input type="text" name="bindingBank" value="622260062001991159"/>
</p>
<p>
<input type="submit" name="submit" value="Submit"/>
</p>
</form>
</body>
</html>

2 使用Nusoap調用 (需要下載nusoap.php附:http://download.csdn.net/detail/mr_z_andy/3845711)
分如下兩種方式:
①直接調用

<?
/*****/
/ 檔案名稱 : soapclient.php
/
說 明 : WebService介面用戶端常式
/* 作 者 :www.sietoo.com
/*****/
include (‘NuSoap.php‘);
// 建立一個soapclient對象,參數是server的WSDL
$client = new soapclient ( ‘http://localhost/Webservices/Service.asmx?WSDL‘, ‘wsdl‘ );
// 參數轉為數組形式傳遞
$aryPara = array (‘strUsername‘ => ‘username‘, ‘strPassword‘ => MD5 ( ‘password‘ ) );
// 調用遠程函數
$aryResult = $client->call ( ‘login‘, $aryPara );
//echo $client->debug_str;
/
if (!$err=$client->getError()) {
print_r($aryResult);
} else {
print "ERROR: $err";
}
/
$document = $client->document;
echo <<<SoapDocument
<?xml version="1.0" encoding="GB2312"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapinterop.org/xsd">
<SOAP-ENV:Body>
$document
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SoapDocument;
?>

②代理調用

<?
/*****/
/ 檔案名稱 : soapclient.php
/
說 明 : WebService介面用戶端常式
/* 作 者 :www.sietoo.com
/*****/
require (‘NuSoap.php‘);
//建立一個soapclient對象,參數是server的WSDL
$client = new soapclient ( ‘http://localhost/Webservices/Service.asmx?WSDL‘, ‘wsdl‘ );
//產生proxy類
$proxy = $client->getProxy ();
//調用遠程函數
$aryResult = $proxy->login ( ‘username‘, MD5 ( ‘password‘ ) );
//echo $client->debug_str;
/
if (!$err=$proxy->getError()) {
print_r($aryResult);
} else {
print "ERROR: $err";
}
/
$document = $proxy->document;
echo <<<SoapDocument
<?xml version="1.0" encoding="GB2312"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapinterop.org/xsd">
<SOAP-ENV:Body>
$document
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SoapDocument;
?>

三、JS客戶調用axis2 webservice (包括調用多參數,但參數方法)
1 執行個體①

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function RequestWebService() {
//這是我們在第一步中建立的Web服務的地址
var URL = "http://localhost/YBWS/WebService.asmx";
//在這處我們拼接
var data;
data = ‘<?xml version="1.0" encoding="utf-8"?>‘;
data = data + ‘<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">‘;
data = data + ‘<soap12:Body>‘;
data = data + ‘<HelloWorld xmlns="http://tempuri.org/" />‘;
data = data + ‘</soap12:Body>‘;
data = data + ‘</soap12:Envelope>‘;
//建立非同步對象
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("POST", URL, false);
xmlhttp.SetRequestHeader("Content-Type", "application/soap+xml");
xmlhttp.Send(data);
document.getElementById("data").innerHTML = xmlhttp.responseText;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="One" type="button" value="JsCallWebService" />
</div>
<div id="data">
</div>
</form>
</body>
</html>

2執行個體② Ajax直接調用,不推薦
下面僅貼出JS段代碼,供參考。
var xmlHttp = null;
var bankno=null;
var telno=null;
var checkid=false;
function createXMLHttpRequest() {
if(window.XMLHttpRequest){
//Firefox ,Mozillar ,Opera ,Safari ,IE7 ,IE8
xmlHttp = new XMLHttpRequest();
//Mozillar瀏覽器的BUG進行修正的
if(xmlHttp.overrideMimeType){
xmlHttp.overrideMimeType("text/html");
}
}else if(window.ActiveXObject){
//針對IE的各種版本
var versions = [ ‘Microsoft.XMLHTTP‘, ‘MSXML.XMLHTTP‘,
‘Microsoft.XMLHTTP‘, ‘Msxml2.XMLHTTP.7.0‘,
‘Msxml2.XMLHTTP.6.0‘, ‘Msxml2.XMLHTTP.5.0‘,
‘Msxml2.XMLHTTP.4.0‘, ‘MSXML2.XMLHTTP.3.0‘,
‘MSXML2.XMLHTTP‘ ];
//嘗試建立XMLHttpRequest對象
for ( var i = 0; i < versions.length; i++) {
try {
xmlHttp = new ActiveXObject(versions);
break;
} catch (e) {
}
}
}

}

function AsynRequest() {
  createXMLHttpRequest();
  if (xmlHttp == null)
{
alert("不能建立 XmlHttpRequest 對象");
return ;
}
  xmlHttp.open("GET", "http://www.sietoo.com/axis2/services/demoService/doTest?UserId="+telno+"&bindingBank="+"&bindingBank="+bankno, false);
  xmlHttp.setRequestHeader("Connection", "close");
  xmlHttp.onreadystatechange = function ()
{
  if (xmlHttp.readyState == 4)
{
  if (xmlHttp.status == 200)
{
if(xmlHttp.responseXML==null)
{
return ;
}

var res2=xmlHttp.responseXML.getElementsByTagName("ns:return")[0].firstChild.nodeValue;
//res2即為傳回值。
return ;
}

}
}
}
xmlHttp.send();
return ;
}

axis2 webservice入門知識(JS,Java,PHP調用執行個體源碼)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.