安裝Apache SOAP
下載需要的資源:
Apache SOAP 2.3 http://apache.linuxforum.net/dist/ws/soap/version-2.3.1/soa
p-bin-2.3.1.zip
mail.jar from JavaMail http://java.sun.com/products/javamail
activation.jar from JavaBeans Activation Framework http://java.sun.com/prod
ucts/beans/glasgow/jaf.html
a JAXP compatible, namespace-aware XML parser such as Apache Xerces (v1.1.2
or later) http://xml.apache.org/xerces-j
Tomcat 4.1.x http://jakarta.apache.org/tomcat
安裝tomcat:
網上很多介紹的文章,這里不再贅述。
安裝Apache SOAP:
把下載回來的soap-2.3.1.zip解壓到c:\soap-2_3_1。把c:\soap-2_3_1\lib下的兩
個文件復制到%TOMCAT_HOME%\common\lib下面;把c:\soap-2_3_1\webapps下的soap.war
復制到%TOMCAT_HOME%\webapps下面;把其他的幾個jar文件(mail.jar,activation.jar,x
erces.jar)復制到%TOMCAT_HOME%\common\lib下面。
設置classpath變量:
把上面的四個jar文件路徑添加到classpath變量中
%TOMCAT_HOME%\common\lib\soap.jar
%TOMCAT_HOME%\common\lib\mail.jar
%TOMCAT_HOME%\common\lib\activation.jar
%TOMCAT_HOME%\common\lib\xerces.jar
PS:我的做法是把這四個jar文件合成一個soap-all.jar文件,并不路徑添加到clas
spath中去,這樣省點事。
測試客戶端配置:
1.打開web瀏覽器,訪問http://127.0.0.1:8080/soap/servlet/rpcrouter,如果出
現提示: “Sorry, I don't speak via HTTP GET- you have to use HTTP POST to tal
k to me”,第一步測試通過。
2.命令行測試:在命令行下輸入下面命令
>java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:808
0/soap/servlet/rpcrouter list
如果輸出只是"Deployed Services:",沒有得到其他任何輸出信息,否則請檢查
classpath配置是否正確
運行HelloWorldService服務
HelloWorldService.java
__________________________________
public class HelloWorldService
{
String getMessage()
{
return "Hello World!";
}
}
_________________________________
創建部署描述符:
部署描述符其實就是一個xml文件。當SOAP請求被發送給org.apache.soap.server.htt
p.RPCRouterServlet時,RPCRouterServlet使用部署描述符來決定把請求路由至何處。下
面將敘述用Apache SOAP的命令行工具注冊服務。
HelloWorld.xml
---------------------------------
<?xml version="1.0"?>
<isd:service xmlns:isd=" <isd:provider type="java" scope="Request" methods="getMessage">
<isd:java class="HelloWorldService" static="false"/>
</isd:provider>
</isd:service>
---------------------------------
注冊服務:
在命令行下輸入(注意要在HelloWorldService.xml文件所在目錄下)
> java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/so
ap/servlet/rpcrouter deploy HelloWorld.xml
如果沒有錯誤提示則注冊成功,可以用下面的幾個命令來查看已經注冊的服務
> java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/so
ap/servlet/rpcrouter list
出現提示“Deployed Services: urn:HelloWorldService”
注銷服務:
> java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/so
ap/servlet/rpcrouter undelpoy "urn:HelloWorldService"
還可以查詢服務屬性:
> java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/so
ap/servlet/rpcrouter query "urn:HelloWorldService"
HelloWorld服務客戶端
HelloWorldClient.java
_______________________
import org.apache.soap.Constants;
import java.net.URL;
import org.apache.soap.Fault;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Response;
import org.apache.soap.rpc.Parameter;
public class HelloWorldClient {
static String DEFAULT_ENDPOINT = "http://localhost:8080/soap/servlet/rpcrout
er";
public static void main(String args[]) throws Exception {
String endPoint = DEFAULT_ENDPOINT;
//Process Arguments
if (args.length == 1)
endPoint = args[0];
else if (args.length > 1)
System.out.println("java HelloWorldClient [endpoint]");
// Build the SOAP RPC request message using the Call object
Call call = new Call();
call.setTargetObjectURI("urn:HelloWorldService");
call.setMethodName("getMessage");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
// Create a URL object, which represents the endpoint
URL url = new URL(endPoint);
// Send the SOAP RPC request message using invoke() method
Response resp = call.invoke(url, "");
// Check the response.
if (resp.generatedFault()) { // Error Occured
Fault fault = resp.getFault();
System.out.println("The Following Error Occured: ");
System.out.println(" Fault Code = " + fault.getFaultCode());
System.out.println(" Fault String = " + fault.getFaultString());
} else { // Completed Successfully
Parameter result = resp.getReturnValue();
System.out.println(result.getValue());
}
}
}
-----------------------------------------------
運行服務:
首先把HelloWorldService.class打包成jar文件放到%tomcat_home%/common/lib或者
直接把HelloWorldService.class放到%tomcat_home%/common/classes下
按照上面講的方法注冊服務,然后運行HelloWorldClient,屏幕輸出"HelloWorld!"