WebService开发指南
WebServiceInAuroraWeb ServiceWeb Service是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。在Aurora框架中可以方便的提供Web Service服务及调用由他人发布的Web Service。 在Aurora中发布Web Service
简单例子我们提供一个svc,此svc把请求的数据插入到一个数据库表中。
<?xml version="1.0" encoding="UTF-8"?> <!-- $Author: linjinxiao $Date: 2011-11-9 上午10:42:34 $Revision: 1.0 $Purpose: --> <bm:model xmlns:bm="http://www.aurora-framework.org/schema/bm" alias="t1" baseTable="ACCOUNT_TEST"> <bm:fields> <bm:field name="ACCOUNT_ID" databaseType="NUMBER" datatype="java.lang.Long" physicalName=prompt="ACOUNT_TEST.ACCOUNT_ID"/> "ACCOUNT_OTHER_CODE" "VARCHAR2" "java.lang.String" "ACOUNT_TEST.ACCOUNT_OTHER_CODE"/> </bm:fields> </bm:model>
<?xml version="1.0" encoding="UTF-8"?> <a:service xmlns:a="http://www.aurora-framework.org/application"> <a:init-procedure> <a:model-insert model="fnd.account_test"</a:init-procedure> <a:service-output output="/parameter"/> </a:service>
public class LowLevelClient { static void main(String[] args) throws AxisFault { ServiceClient client = new ServiceClient(); Options options = new Options(); options.setTo(new EndpointReference( "http://127.0.0.1:8080/newhec/modules/sys/ws_test.svc"));//修正为实际工程的URL client.setOptions(options); OMElement request = makeRequest(); OMElement response = client.sendReceive(request); System.out.println("ok:"+response.toString()); } private static OMElement makeRequest() { OMFactory factory = OMAbstractFactory.getOMFactory(); OMElement request = factory.createOMElement(new QName( "","parameter")); request.addAttribute("ACCOUNT_ID","123",null); request.addAttribute("ACCOUNT_OTHER_CODE","test",null); return request; }
复杂例子这个例子处理有头行结构的例子。譬如,调用方发送过来的请求是如下格式 <requestHead seqNo="1"<requestBody> <records> <record ACCOUNT_ID="22" ACCOUNT_OTHER_CODE="test"/> "33" "test2"</records> </requestBody> 返回的结构要求是如下格式 <responseHead xmlns="http://aurora.org" /> <requestBody responsedate="3008900"<records> "test" REQUEST_RESULT="successful" /> "test2" /> </records> </requestBody>
create or replace package ACCOUNT_TEST_PKG is procedure insert_account_test(p_account_id number,p_account_other_code varchar2,p_request_result out varchar2); end ACCOUNT_TEST_PKG; replace package body "ACCOUNT_TEST_PKG" out varchar2) begin insert into account_test (account_id,account_other_code) values (p_account_id,p_account_other_code); p_request_result := 'successful'; end; end ACCOUNT_TEST_PKG; /
<bm:operations> <bm:operation "insert"> <bm:update-sql><![CDATA[ begin ACCOUNT_TEST_PKG.insert_account_test ( p_account_id => ${@ACCOUNT_ID},p_account_other_code => ${@ACCOUNT_OTHER_CODE},p_request_result => ${@REQUEST_RESULT} ); end; </bm:update-sql> <bm:parameters> <bm:parameter name="ACCOUNT_ID"/> <bm:parameter name="ACCOUNT_OTHER_CODE"/> <bm:parameter name="REQUEST_RESULT" output="true" outputPath="@REQUEST_RESULT"/> </bm:parameters> </bm:operation> </bm:operations>
"http://www.aurora-framework.org/application" xmlns:p="uncertain.proc"<p:echo/> <!-- 对数据进行循环操作--> <batch-apply sourcepath="/parameter/requestBody/records"> /> </batch-apply> <!--更改节点的名称和namespace--> <p:set-element target="/parameter/requestHead" "responseHead" namespace="http://aurora.org" /> <!-- 获得当前的时间--> <a:model-query fetchAll="true" fethOneRecord="ccic.systest" rootPath="/parameter/requestBody"/> "/parameter/"</a:service>
static OMElement makeRequest2() { OMFactory factory = OMAbstractFactory.getOMFactory(); OMElement request = factory.createOMElement(new QName("soap:Body")); OMElement requestHead = factory.createOMElement(new QName("requestHead")); requestHead.addAttribute("seqNo","1",null); OMElement requestBody = factory.createOMElement(new QName("requestBody ")); OMElement records = factory.createOMElement(new QName("records ")); OMElement record = factory.createOMElement(new QName("record ")); record.addAttribute("ACCOUNT_ID","11",null); record.addAttribute("ACCOUNT_OTHER_CODE",null); records.addChild(record); requestBody.addChild(records); request.addChild(requestHead); request.addChild(requestBody); return request; }
调用WebService
假设服务端要求提交的格式如下: <axis2ns1:cancat xmlns:axis2ns1="http://www.aurora.org/simple/"<s1>abc</s1> <s2>def</s2> </axis2ns1:cancat> 返回的格式如下: <ns1:syncAccResponse xmlns:ns1=http://service.test.com&; <ns1:out> <ns2:Account xmlns:ns2=//dto.test.com&; <ACCOUNT_ID //dto.test.com&;1681</ACCOUNT_ID> <ACCOUNT_OTHER_CODE //dto.test.com&;</ACCOUNT_OTHER_CODE> </ns2:Account> //dto.test.com&;1682</ns2:Account> </ns1:out> </ns1:syncAccResponse>
"http://www.aurora-framework.org/schema/bm""query"<bm:query-sql><![CDATA[select '3008900' exp_report_number,'222222222' employee_code,'测试' name,'MAS' unit_code,'test@hand-china.com' email,'0' type from dual </bm:query-sql> </bm:operation> </bm:operations> </bm:model>
"http://www.aurora-framework.org/application" "uncertain.proc" xmlns:rs="aurora.database.rsconsumer" > <a:init-procedure> <!-- 构建符合的请求的格式--> prefix="ns1" nameSpace="http://www.aurora.org/simple" localName="cancat" "sys.systest" "/model/result1"/> "s1" attribAsCdata=attribAsCdataList="unit_code""/model/result1/cancat""s2" "employee_code" /> <!-- 请求WebService--> <a:ws-invoker raiseExceptionOnError="false" url="http://localhost:8080/axis2/services/simple" inputPath="/model/result1/cancat" returnPath="/model/syncAccResponse"<!--把子节点中cdata的内容整合成父节点中的一个属性 --> <p:method-invoke className="uncertain.composite.CompositeUtil" methodName="collapse"<p:arguments> <p:argument path="/model/syncAccResponse/out" type="uncertain.composite.CompositeMap"/> </p:arguments> </p:method-invoke> <as:SetParameterParsed /> <!--循环处理子节点 --> "/model/syncAccResponse/out"> /> </batch-apply> </a:init-procedure> />
svc常用功能简介
fetchOneRecord=/>
<model> <result1> <concat> employee_cod=</concat> </result1> </model>
<concat /> </model>
> /> </batch-apply>
"s2" "true" "ns1" </a:model-query>
</model>
<ns1:s2 "http://www.aurora.org/simple">test</ns1:s2> </model>
> <p:arguments> /> </p:arguments> </p:method-invoke>
<syncAccResponse> <out> <s1>yes</s1> <s2>test</s2> </out> </syncAccResponse1> </model>
<out s1="yes" s2=</model>
"copyAttributes" > <p:arguments> "/model/result4" "java.util.Map""/parameter" </p:method-invoke>
<result4 </model> <parameter s3="aurora" />
/>
"ok" "right" childLevel="0"/>
</model>
<right:ok xmlns:right=</right:ok> </model>
>yes</right:o> </right:o> </model> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |