什么叫五結合項目,Spring項目跟Axis2結合

 2023-12-09 阅读 34 评论 0

摘要:本文的前提是已經有一個Spring的項目,在此基礎上如何跟Axis2進行結合,開發出WebService服務和調用WebService服務。 1.開放WebService服務 ?? 1.引入必要的jar包 ???????? 將axis2-1.6.2-bin\axis2-1.6.2\lib所有包引入到你自己的工程中。(當然里面有些是

本文的前提是已經有一個Spring的項目,在此基礎上如何跟Axis2進行結合,開發出WebService服務和調用WebService服務。

1.開放WebService服務

?? 1.引入必要的jar包

???????? 將axis2-1.6.2-bin\axis2-1.6.2\lib所有包引入到你自己的工程中。(當然里面有些是不必要的,有興趣的可以自己刪減)。

?? 2.引入必要的文件,以及創建新的Service.xml

什么叫五結合項目、??????? 1.將\axis2-1.6.2-war\axis2\WEB-INF中的conf目錄,modules目錄,copy到你工程的WEB-INF中。

??????? 2.在WEB-INF中,新建services目錄(必須),里面可以劃分具體的子目錄,子目錄底下創建META-INF目錄(必須),,目錄下新建文件:services.xml(必須),

???????? 創建完成后,目錄結構如下:

??????? image

??????? service.xml中的內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<service name="testWebService"><description>testWebService</description><parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier</parameter><parameter name="SpringBeanName">TestWebService</parameter><messageReceivers><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></messageReceivers><schema schemaNamespace="http://service.telchina.cn" />
</service>

?? 3.修改Web.xml,增加以下配置

<servlet><servlet-name>AxisServlet</servlet-name><servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class><load-on-startup>2</load-on-startup></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping>

django 前后端分離。?? 4.修改ApplicationContext.xml

<bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />

PS:

? 必須要加此配置,否者報錯:

Caused by: java.lang.Exception: Axis2 Can't find Spring's ApplicationContext

官方描述:https://axis.apache.org/axis2/java/core/docs/spring.html

?? 5.創建服務類

package cn.telchina.standard.service;import org.springframework.stereotype.Component;@Component("TestWebService")
public class TestWebService {public String sayHello(String name) {  return "hello"+name;  } 
}

django jsonfield??

2.調用WebService服務

調用有兩種方式:

1.RPC方式

public  void testRPCClient() {  try {// axis2 服務端  String url = "http://localhost:8080/axis2Project/services/testWebService";  // 使用RPC方式調用WebService  RPCServiceClient serviceClient = new RPCServiceClient();  // 指定調用WebService的URL  EndpointReference targetEPR = new EndpointReference(url);  Options options = serviceClient.getOptions();  //確定目標服務地址  
          options.setTo(targetEPR);  /** * 指定要調用的getPrice方法及WSDL文件的命名空間 * 如果 webservice 服務端由axis2編寫 * 命名空間 不一致導致的問題 * org.apache.axis2.AxisFault: java.lang.RuntimeException: Unexpected subelement arg0 */  QName qname = new QName("http://service.telchina.cn", "sayHello");  // 指定getPrice方法的參數值  Object[] parameters = new Object[] { "name" };  // 指定getPrice方法返回值的數據類型的Class對象  Class[] returnTypes = new Class[] { String.class };  // 調用方法一 傳遞參數,調用服務,獲取服務返回結果集  OMElement element = serviceClient.invokeBlocking(qname, parameters);  //值得注意的是,返回結果就是一段由OMElement對象封裝的xml字符串。  //我們可以對之靈活應用,下面我取第一個元素值,并打印之。因為調用的方法返回一個結果  String result = element.getFirstElement().getText();  System.out.println(result);  //          // 調用方法二 getPrice方法并輸出該方法的返回值  
//          Object[] response = serviceClient.invokeBlocking(qname, parameters, returnTypes);  
//          // String r = (String) response[0];  
//          String r = (String) response[0];  
//          System.out.println(r);  
      } catch (AxisFault e) {  e.printStackTrace();  }  }

2.AXIOM方式

/** * 方法二: 應用document方式調用 * 用ducument方式應用現對繁瑣而靈活。現在用的比較多。因為真正擺脫了我們不想要的耦合 */  public  void testDocument() {  try {  // String url = "http://localhost:8080/axis2ServerDemo/services/StockQuoteService";  String url = "http://localhost:8080/axis2Project/services/testWebService";  Options options = new Options();  // 指定調用WebService的URL  EndpointReference targetEPR = new EndpointReference(url);  options.setTo(targetEPR);  // options.setAction("urn:getPrice");  
      ServiceClient sender = new ServiceClient();  sender.setOptions(options);  OMFactory fac = OMAbstractFactory.getOMFactory();  // 命名空間,有時命名空間不增加沒事,不過最好加上,因為有時有事,你懂的  OMNamespace omNs = fac.createOMNamespace("http://service.telchina.cn", "");  OMElement method = fac.createOMElement("sayHello", omNs);  OMElement symbol = fac.createOMElement("name", omNs);  // symbol.setText("1");  symbol.addChild(fac.createOMText(symbol, "Axis2 Echo String "));  method.addChild(symbol);  method.build();  OMElement result = sender.sendReceive(method);  System.out.println(result);  } catch (AxisFault axisFault) {  axisFault.printStackTrace();  }  }

?

自己的項目,PS:

雖然這個例子中使用SPring的注解方式來聲明了bean,但是Axis2本身不支持使用@WebService的注解直接聲明服務,這個跟CXF是有本質的區別。

在瀏覽器中輸入地址:http://localhost:8080/axis2Project/services/testWebService?wsdl

可以看到:

image

?

介紹項目?參考文章:

? 1.http://www.cnblogs.com/linjiqin/archive/2011/07/05/2098316.html

? 2.http://sunpfsj.blog.163.com/blog/static/1770500972013424113314769/

轉載于:https://www.cnblogs.com/sdjnzqr/p/3956424.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/193160.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息