WebServiceの2つのクライアント呼び出し方式

7319 ワード

WebServiceの2つのクライアント呼び出し方式
1.WebServiceインタフェースを構築する.
インタフェースクラス:
package hello;

public interface IHello {
	
	public String hello(String str,String str2) ;

}

実装クラス:
package hello;

public class Hello implements IHello{

	public String hello(String str,String str2) {
		return "Hello world ,i'am "+str+".     = "+str2 ;
	}

}

services.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
	<service>
		<name>Hello</name>
		<namespace>rcfeng</namespace>
		<serviceClass>hello.IHello</serviceClass>
		<implementationClass>hello.Hello</implementationClass>
	</service>
</beans>

web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

注:ここではXFireを使用してWebServiceを構築するが、XFireパッケージを参照する必要があり、XFireと表記する必要があるが、どのフレームワークでWebServiceを構築してもアクセス原理は同じであるため、どのクライアントでもアクセス可能であり、導入するパッケージは文章の末尾に明記する必要がある.
2.WebServiceを呼び出す2つのクライアントについて説明します.
2.1 XFireクライアント:
XFireクライアントがWebServiceにアクセスするには、WSのインタフェースをシミュレートする必要があります.インタフェースの構造は一般的にインタフェースを定義するサービス業者が提供しています.自分で書いたものならもっと明確です.
シミュレーションWebServiceインタフェース(このインタフェースの書き方はWSサーバと同じですが、同じプロジェクトでも同じクラスでもありません):
クライアントインタフェースクラス:
ここでAnyNameという名前は、任意のアナログインタフェースの任意の名前が可能であることを意味し、呼び出す方法の構造がWSと同じであればよい.
package xfire;

public interface IAnyName {
	
	public String hello(String str,String str2) ;

}

クライアント呼び出しクラス、テストクラス:
package xfire;

import org.codehaus.xfire.XFire;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class XFireTest {

	public static void main(String[] args) {
		
		try {
			
			String url = "http://localhost:9415/rcfeng-WebService/services/Hello" ;
			
			Service service = new ObjectServiceFactory().create(IAnyName.class) ;
			
//			XFire fire=XFireFactory.newInstance().getXFire();
//			XFireProxyFactory factory=new XFireProxyFactory(fire);
			XFireProxyFactory factory = new XFireProxyFactory() ;
			
			IAnyName hello = (IAnyName) factory.create(service,url) ;
			
			String str = hello.hello("rcfeng","Parameter two") ;
			
			System.out.println(str);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

2.2 Axisクライアント:
package axis;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

public class AxisTest {
	
	public static void main(String[] args) {
		
		try {
			
			String str = "rcfeng" ;
			String endpoint = "http://localhost:9415/rcfeng-WebService/services/Hello" ;
			
			Service service = new Service() ;
			
			Call call = (Call) service.createCall() ;
			
			call.setTargetEndpointAddress(endpoint) ;
			call.setOperationName("hello") ;//ws 
			// , , , new Object 
			call.addParameter("parameter1",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;
			call.addParameter("parameter2",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;
			call.setReturnType(XMLType.XSD_STRING) ;
			call.setUseSOAPAction(true) ;
//			call.setSOAPActionURI("http://172.20.35.123:6110/cea-ws/services/ChangeMemberPinService");
			
			String result = (String) call.invoke(new Object[]{str,"Parameter two"}) ;
			
			System.out.println(result);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

以上のコードは本人のテストに合格した.
ちなみに個人的な理解:
XFireクライアントの呼び出し方式は、WSインタフェースを先に指定する構造と同様に、リモートアドレスから1つのオブジェクトをローカルにインスタンス化する方法であり、方法構造と同様であるため、強制的に変換することができる.その後、ローカルコールを直接行う.
Axisクライアントの呼び出し方式はHTTPアクセスと類似しており、パラメータを設定して直接遠隔呼び出しする.
?wsdlアドレスのソース=サービスプロバイダが提供します.自分で作ったWebServiceであれば、デフォルトのフォーマットにアクセスできます.
http://[IPアドレス:ポート]/[プロジェクトアクセスパス]/services
のように
http://localhost:9415/rcfeng-WebService/services
urlのソースについては、先に手に入れますか?wsdlアドレス、次にアクセスします.
http://localhost:9415/rcfeng-WebService/services/Hello?wsdlを下に引くと赤い部分が見えます.

   
       
   


呼び出されたメソッドの名前は次のとおりです.

WebServiceのインタフェースを呼び出すことができます.
XFireで使用するパッケージ:
activation-1.1.jar
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-httpclient-3.0.jar
commons-logging-1.0.4.jar
jaxen-1.1-beta-9.jar
jaxws-api-2.0.jar
jdom-1.0.jar
jsf-api.jar
jsf-impl.jar
jsr173_api-1.0.jar
jstl-1.2.jar
mail-1.4.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
spring-1.2.6.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.0.jar
xbean-2.2.0.jar
xbean-spring-2.8.jar
xfire-aegis-1.2.6.jar
xfire-annotations-1.2.6.jar
xfire-core-1.2.6.jar
xfire-java5-1.2.6.jar
xfire-jaxws-1.2.6.jar
xfire-jsr181-api-1.0-M1.jar
xfire-spring-1.2.6.jar
XmlSchema-1.1.jar
Axisで使用するパッケージ:
axis.jar
commons-discovery-0.2.jar
注:以上の2つのクライアント本人は同じプロジェクトに書いてあるので、Axisが使うパッケージが少なく見えます.いくつかの汎用パッケージはXFireを使用するときに追加されたからです.
項目の説明を添付します.
rcfeng-WebServiceはWebServiceサービス側のプロジェクトです
rcfeng-TestWebServiceはクライアントプロジェクト
rcfeng-WebServiceプロジェクトにはパッケージがありません.rcfeng-TestWebServiceWebRootWEB-INFlibXFireで入手できます.また、rcfeng-WebServiceプロジェクトではMyEclipseリファレンスパッケージを使用しています.直接プロジェクトをインポートするにはjarパスを更新したりパスを削除したりして、自分でjarパッケージをインポートする必要がある場合があります