2011年8月11日 星期四

[AXIS2] 對AXIS平台發soap rpc訊息

當然axis是一個web service提供者~ 自己也要自己測一下有沒有通QQ

以最簡易之RPC message來講, 內容是從.net那隻改過來的~

與.net的差別大概是~ axis的rpc xml有順序~ 丟Map不吃~ 就只好改成List處理, 其實他內建裡面應該是用參數1, 參數2, 參數3...降子代替的~ 而看文章上~ rpc好像也沒規定一定要有name

NameSpace的部分~ axis會直接以package做NameSpace..要注意~

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import java.util.*;

public class TestAxisSample {
EndpointReference targetEPR=new EndpointReference("http://xxx/xxx/services/xxx?wsdl");
public OMElement reqOMElement(List params, String op){
OMFactory fac=OMAbstractFactory.getOMFactory();
OMNamespace omNs=fac.createOMNamespace("http://xx.xxx.xxx.xxx","xs");
OMElement method=fac.createOMElement(op,omNs);

if(params != null && params.size() > 0) {
for(int i = 0 ; i < params.size() ; i++) {
String[] val = (String[])params.get(i);
OMElement param=fac.createOMElement(val[0],omNs);
param.setText(val[1]);
method.addChild(param);
}
}
System.out.println("??method="+method);

return method;
}

public static void main(String[] args){
Properties p = System.getProperties();
p.put("http.proxyHost", "xxx");
p.put("http.proxyPort", "xxx");
try{
TestAxisSample tas = new TestAxisSample();

Options options=new Options();
options.setTo(tas.targetEPR);
ServiceClient sender=new ServiceClient();
sender.setOptions(options);


List mp2 = new Vector();
mp2.add(new String[]{"xxx", "xxx"});
mp2.add(new String[]{"xxx2", "xxx"});
String op2 = "xxx";

OMElement build=tas.reqOMElement(mp2, op2);
OMElement result=sender.sendReceive(build);

System.out.println(result);
} catch(Exception axisFault){
axisFault.printStackTrace();
}
}
}

沒有留言: