2012-06-27 192 views
0

我已經創建並註冊了一個Web服務。現在我想製作一個簡單的Web應用程序來訪問Web服務。我使用axis2作爲Web服務服務器。客戶端以xml格式文件(data.xml)的形式提供要由Web服務處理的數據。我的jsp表單有一個文本框(提供data.xml的位置)和一個「調用」按鈕,可以訪問調用web服務。我假設jsp將首先將請求發送給servlet,然後servlet將成爲負責調用Web服務的人員。 Web服務託管在PC1中,包含訪問Web服務的JSP的Web應用程序位於PC2中,data.xml位於PC3中。因此,用戶將從PC3開始工作,在PC3中打開Web瀏覽器訪問PC2中的jsp,然後調用PC1中的Web服務。訪問網絡服務

  1. 什麼是從servlet調用Web服務的語法?我想知道axis2是否可以在客戶端使用。
  2. 我該如何構建SOAP請求(我假設SOAP請求是在servlet中構建的)?希望我不需要按字符串構造SOAP請求字符串。
  3. 關於data.xml,我假設jsp會把文件上傳到servlet,所以servlet會收到一個文件作爲參數。這是正確的方法嗎? 謝謝

回答

0

除非你想手工做,你應該使用web服務堆棧。 Apache CXF和Metro都是不錯的選擇。

這就是說,我不知道你想用你的data.xml做什麼。

  1. 取決於框架
  2. 你不知道。這就是框架的用途。
  3. 如果您想要多部分支持,您應該查看現成的servlet。或者更好的是,使用Spring框架:)
1

由於您使用的Axis2,它生成客戶端代理(WSDL2Java的是你最好的朋友),併爲您的Web服務標準的Java代理。無需手動創建SOAP信封...(至少在99%的情況下)。

只需生成一個WSDL(使用java2wsdl編寫或生成它),然後使用它來生成調用Web服務的java代理。

關於如何使用代理...從JSP

恕我直言,直接調用是一個沒有沒有。最好讓JSP收集數據並將它們發佈到servlet,然後在servlet中執行WebService調用,管理響應(如果您使用Axis2框架,它將是一個純java對象),處理錯誤並轉發給另一個JSP,以提供結果。

JSP有些容易寫,但是從長遠來看,更好地利用他們,他們的計劃是什麼,並保持servlet的

這裏做WSDL和客戶端生成2個Ant任務中的業務邏輯。

<!-- create the wsdl file --> 
<target name="genwsdl"> 
    <echo message="Generate the WSDL file"/> 
    <taskdef name="java2wsdl" classname="org.apache.ws.java2wsdl.Java2WSDLTask" classpathref="axis2.classpath"/> 
    <java2wsdl className="org.stackoverflow.YourWebServiceClassName" 
       servicename="YourServiceName" 
       description="Whatever..." 
       outputLocation="./wsdl" 
       locationuri="http://localhost:8081/NameMe/CoolService"> 
      <classpath> 
       <pathelement path="${axis2.classpath}"/> 
       <pathelement location="./build/classes"/> 
      </classpath> 
    </java2wsdl> 
    <echo message="Generation of the WSDL file complete"/> 
</target> 


<target name="genclient" depends="genwsdl"> 
    <taskdef name="axis2-wsdl2java" classname="org.apache.axis2.tool.ant.AntCodegenTask" classpathref="axis2.classpath"/> 
    <axis2-wsdl2java wsdlfilename="./wsdl/YourWsdl.wsdl" output="./client overwrite="true"/> 
</target> 

一旦你生成你的客戶端類(代理),你可以用它們來調用Web服務。

這將是這樣的:

YourServiceStub stub = new YourServiceStub(wsEndPointUrl); 

然後在存根你必須爲每個遠程發佈的方法和靜態類包裝的請求/響應對象的方法。但是在這一點上,Axis2客戶端文檔的一些內容是強制性的。

+0

是的,所以基本上jsp會將文件上傳到位於PC2的servlet。你能給我一些語法來構造來自servlet的SOAP消息並調用servlet中的Web服務嗎?謝謝 –

+0

這有點難,我可以添加一個螞蟻任務的例子。 – BigMike

+0

非常感謝 –