axis 2 webservice入門知識(JS、Java、PHP呼び出しの実例的なソースコード)

17066 ワード

ソース:http://www.myexception.cn/web/952419.html
 
axis 2 webservice入門知識(JS、Java、PHP呼び出しの実例的なソースコード)
背景の説明
最近、銀行インターフェースの案件に接触しました.臨時にaxis 2 webserviceを使う必要があります.自分で今総括するいくつかのものを学んで、新米に残します.回り道をするな
Axis 2概要
①AXIOM(AXIs Object Model)という新しいコアXML処理モデルを採用し、新しいXML解析器が提供する柔軟性を利用して、必要に応じて対象モデルを構築する.
②異なるメッセージ交換モードをサポートします.現在Axis 2は3つのモードをサポートしています.In-Only、Robust-IN、In-Out.In−Onlyメッセージ交換モードは、応答を必要としないSOAP要求のみである.Robust−Innメッセージ交換モードはSOAP要求を送信し、エラーが発生した場合のみ応答を返す.In−Outメッセージ交換モードは、常にSOAP要求および応答が存在する.
③ブロック及びブロックされていないクライアントAPIを提供する.
④内蔵のWebサービスアドレス指定(WS-Addresing)に対応します.
⑤柔軟なデーターバインディングは、直接にAXIOMを使用して、元のAxisに似た簡単なデーターバインディング方法を使用したり、XMLBens、JiBX、JAXB 2.0などの専用データバインディングフレームを使用したりすることができます.
⑥新しい配置モデルは、熱配置に対応しています.
⑦HTTP,SMTP,JMS,TCP転送プロトコルに対応します.
⑧REST(Representational State Transfer)に対応します.
テスト環境
【jdk 1.6.0】+【tomcat-6.0.18】+【axis 2-1.6.1】+【PHP Version 5.3.5】
最低サポートプロファイルがテストされていません.
環境の準備
一、Axis 2環境の整備.
1.ダウンロードインストール
apache公式サイトのダウンロード先:http://ws.apache.org/axis2/  Standard Binary DistributionとWAR Distributionを選択します.
2.システム環境変数を設定します.
①AXIS 2_を追加HOME変数は、Standard Binary Disctributionの解凍対象ディレクトリを指します.例えば:AXIS 2_HOMEドル=D:\axis 2-1.6.1;
②axis 2.bat所在ディレクトリをシステム環境変数pathに追加します.例えば、D:\axis 2-1.6.1\binをpath既存値の最後尾に追加します.
③を$AXIS 2_ホーム$libはシステム環境変数classipathに追加されます.例えば、D:\axis 2-1.6.1\libをクラスパスの既存値の最後尾に追加します.
3.WAR Distributionを$tomcat_に伸張する.ホーム$webapps\axis 2の下で(axis 2フォルダを新規作成)、もちろんaxis 2のドキュメントに記載されている手順を参照してください.antを使ってaxis 2.warを作成してください.home$webappsの下で、tomcatを起動したら、tomcatはwebappsの下で自動的にaxis 2フォルダを作成します.
二、Axis 2環境をテストします.
1.アクセスhttp://localhost:[port]/axis 2(port)をあなたのTomcat対応ポートに変更してください.デフォルトは8080です.axis 2の歓迎インターフェースに入りました.「Validate」をクリックします.
エラーがあったら、エラー情報に基づいて上記の手順をチェックします.エラー情報がない場合、Axis 2の環境テストは合格となります.
2.「Administration」をクリックして初期ユーザー名とパスワードを使うことができます.axis 2は登録して、System ComponentsとUpload Service Toolsを使うことができます.新しいarrファイルが展開されました.別途$tomcat_に行くことができますホーム$webapps\axis 2\WEB-INF\conf\axis 2.xmlでユーザー名とパスワードを修正します.
Demo Hello Worldを作成します.
一、サービス端末の開発
1.javaプロジェクトを作成する
2.新規類ハローワールド.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>
二、プロジェクトを包装して発表します.おなじみのIDEを使ってハローWorld.aarに包んで直接包装します.コマンドラインの状況で、現在のディレクトリをこのプロジェクトのパッケージに切り替えます.ブロガーの例として、sampleがあるフォルダに切り替える必要があります.sampleに切り替えられていないことに注意してください.以下のコマンドを使います.jar cvf Hello World.aar.は現在のディレクトリでハローWorld.aarを生成します.命令の末尾の点「.」に注意してください.2.上記の登録axis 2を使って見たUpload ServiceツールがHello World.arrをTomcに配置したと発表しました.3.テストを発表します.例えば、ブロガーの例にアクセスします.http://localhost:8088/axis2/services/HelloWorld?wsdl第2ステップで展開されたハロルドの記述ファイルを確認します.エラーがあったら、エラー情報に基づいて上記の手順をチェックします.エラーメッセージがなければハローワールドのサービスが完了します.三、簡単なクライアント呼び出し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 Hello Worldは完全に完了します.様々なクライアントの呼び出しの例1、javaは、単一パラメータと複数のパラメータ方法の呼び出しを含むaxis 2 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呼び出しaxis 2 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="">
   tel.
   <input type="text" name="UserId" value="18629078888"/>
   

  pwd.
   <input type="password" name="passwd" value="admin" />
   

    cardno.
   <input type="text" name="bindingBank" value="622260062001991159"/>
   

   
    <input type="submit" name="submit" value="Submit"/>
   

  </form>
</body>
</html>
2 Nusoapを使って呼び出します.http://download.csdn.net/detail/mr_z_andy/3845711)次の2つの方法に分けて、①直接呼び出し
<?
/*************************************************************/
/*      : 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顧客がaxis 2 webserviceを呼び出す(マルチパラメータを呼び出すことを含むが、パラメータ方法)の一例①
<%@ 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" onclick="RequestWebService()" />
    </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[i]);
     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  ;
}