- 论坛徽章:
- 0
|
通常情况下,我们创建的WebService服务是以aar包的形式发布到服务器上的,为了简化我们的发布过程,写一个ant脚本是理所当然的了,当然你也可以连WebService的客户端测试脚本一起写好,下面就是我做的
WebService的服务提供类如下:
package samples.helloworld.service.axiom;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMFactory;
import javax.xml.stream.XMLStreamException;
/**
*
* Description:
* @author Danlley Wei
* @version 1.0
* @date 2007-4-5
*/
public class HelloWorldService{
private HashMap messages=new HashMap();//存放用户信息
public static final String URL="
http://axiom.service.helloworld.samples/xsd
";
public static final String NS="ns";
OMFactory fac=OMAbstractFactory.getOMFactory();//初始化工厂
OMNamespace omNs=fac.createOMNamespace(URL,NS);//生成命名空间
/**
* 说明:客户端请求授权信息时调用的接口
* @param element 用来接收客户端的XML信息
* @return
* @throws XMLStreamException
*/
public OMElement getHelloWorldMs(OMElement element)throws XMLStreamException{
try{
element.build();
element.detach();
ArrayList dataLi=new ArrayList();
String symbol=null;
String userPWD=null;
String transactionKey=null;
for(Iterator it=element.getChildElements();it.hasNext();){
OMElement temp=(OMElement)it.next();
if(temp.getLocalName().equalsIgnoreCase("symbol")){
symbol=temp.getText();
}
if(temp.getLocalName().equalsIgnoreCase("userPWD")){
userPWD=temp.getText();
}
if(temp.getLocalName().equalsIgnoreCase("transactionKey")){
transactionKey=temp.getText();
}
if(null!=userPWD)dataLi.add(userPWD);
if(null!=transactionKey)dataLi.add(transactionKey);
if(null!=symbol)dataLi.add(symbol);
}
// System.out.println("********"+symbol+" | "+userPWD+" | "+transactionKey+" | "+"********");
element=responseMessage("getHelloWorldMsResponse",symbol,userPWD,transactionKey);//产生应答信息
return element;
}catch(Exception e){
e.printStackTrace();
throw new XMLStreamException();
}
}
/**
* 说明:此方法无返回值,用于初始化用户帐号信息
*
* @param element
* @throws XMLStreamException
*/
public void setHelloWorldMs(OMElement element)throws XMLStreamException{
try{
element.build();
element.detach();
String symbol=null;
String userPWD=null;
String transactionKey=null;
ArrayList dataLi=new ArrayList();
for(Iterator iter=element.getChildElements();iter.hasNext();){
OMElement tmp=(OMElement)iter.next();
if(tmp.getLocalName().equalsIgnoreCase("symbol")){
symbol=tmp.getText();
}
if(tmp.getLocalName().equalsIgnoreCase("userPWD")){
userPWD=tmp.getText();
}
if(tmp.getLocalName().equalsIgnoreCase("transactionKey")){
transactionKey=tmp.getText();
}
if(null!=userPWD)dataLi.add(userPWD);
if(null!=transactionKey)dataLi.add(transactionKey);
if(null!=symbol)dataLi.add(symbol);
}
if(!messages.containsKey(symbol)){
messages.put(symbol,dataLi);
System.out.println("******** add user "+symbol+" ********");
}else{
System.out.println(" The userInfo already exist here ------->"+symbol);
}
}catch(Exception e){
e.printStackTrace();
throw new XMLStreamException(e);
}
}
/**
* 说明:用于判断是否下载成功,消息产生方式与方法:
* getHelloWorldMs(OMElement element)throws XMLStreamException相同。
* @param element
* @return
* @throws XMLStreamException
*/
public OMElement getDownloadConfirm(OMElement element)throws XMLStreamException{
try{
element.build();
element.detach();
String symbol=null;
String userPWD=null;
String transactionKey=null;
OMElement myel=element.getFirstElement();
symbol=myel.getText();
OMElement myel1=(OMElement)myel.getNextOMSibling();
userPWD=myel1.getText();
OMElement myel2=(OMElement)myel1.getNextOMSibling();
transactionKey=myel2.getText();
element=responseMessage("getDownloadConfirmResponse",symbol,userPWD,transactionKey);//产生应答信息
System.out.println("**********************************************************");
System.out.println(" DOWNLOAD INFORMATION ");
System.out.println(" the message have been sended to the Client !");
System.out.println("**********************************************************");
return element;
}catch(Exception e){
e.printStackTrace();
throw new XMLStreamException(e);
}
}
/**
* 说明:产生客户端请求后的应答信息,其信息为一个OMElement对象OMElement element ,其结果送给上层调用者
* getHelloWorldMs(OMElement element)throws XMLStreamException;
* getDownloadConfirm(OMElement element)throws XMLStreamException
* @param eleName
* @param userName
* @param userPWD
* @param transactionKey
* @return
*/
private OMElement responseMessage(String eleName,String userName,String userPWD,String transactionKey){
OMElement element=fac.createOMElement(eleName,omNs);
if(cheAuthrized(userName,userPWD)){
element=createRespElement(element,"0","Success");//产生授权成功的应答信息
}else{
//生成一个1~11以内的随机数,如果随机数为 0 ,则强制指定为 10 ,防止与正确的应答 code重复
int rand=(int)(Math.random()*10);
if(rand+Math.random()>9)rand=11;
if(rand==0)rand=10;
System.out.println("There are some errors occured here with the random number : "+rand);
element=getErrorElement(rand,element);
}
return element;
}
/**
* 说明:根据不同的错误码,获取错误信息结点,并把结点信息送到上层调用者
* responseMessage(String eleName,String userName,String userPWD,String transactionKey);
* @param errorCode
* @param element
* @return
*/
private OMElement getErrorElement(int errorCode,OMElement element){
switch(errorCode){
case 1:
element=createRespElement(element,"REQUEST_ERROR","Error on the request (parameter format)");
break;
case 2:
element=createRespElement(element,"CONTEXT_ERROR","Context errors (in this case, can be user disabled)");
break;
case 3:
element=createRespElement(element,"SECURITY_ERROR","Wrong Credentials or Permission Denied on this API");
break;
case 4:
element=createRespElement(element,"SECURITY_ERROR","Invalid credentials");
break;
case 5:
element=createRespElement(element,"REQUEST_ERROR","transactionKey is required");
break;
case 6:
element=createRespElement(element,"REQUEST_ERROR","Invalid transactionKey format");
break;
case 7:
element=createRespElement(element,"REQUEST_ERROR","Invalid transactionKey");
break;
case 8:
element=createRespElement(element,"CONTEXT_ERROR","transactionKey already confirmed");
break;
case 9:
element=createRespElement(element,"CONTEXT_ERROR","transactionKey not found");
break;
case 10:
element=createRespElement(element,"CONTEXT_ERROR","Not enough credits ");
break;
default:
element=createRespElement(element,"APPLICATION_ERROR","Undetected error on Web Service");
break;
}
return element;
}
/**
* 说明:当服务器收到请求后做出应答响应,并将应答信息返回给客户端,该应答信息是一个xml结点,如下:
*
* the response code
* detail information
*
* 此方法仅仅用于生成如上结构的结点,并将处理后的结果转交给上层调用者
* responseMessage(String eleName,String userName,String userPWD,String transactionKey);
* 来处理
* @param eleName
* @param arg0
* @param arg1
* @return
*/
private OMElement createRespElement(OMElement element,String arg0,String arg1){
OMElement value1 = fac.createOMElement("Code", omNs);
value1.addChild(fac.createOMText(value1, arg0));
element.addChild(value1);
OMElement value2 = fac.createOMElement("Description", omNs);
value2.addChild(fac.createOMText(value2, arg1));
element.addChild(value2);
return element;
}
/**
* 说明:判断当前用户的账户信息是否正确,只有在用户名和密码都正确的情况下才返回true,并把结点信息送到上层调用者
* responseMessage(String eleName,String userName,String userPWD,String transactionKey);
* @param userName 用户名
* @param userPWD 密码
* @return
*/
private boolean cheAuthrized(String userName,String userPWD){
// System.out.println("********"+userName+" | "+userPWD+"********");
if(messages.containsKey(userName)&&null!=userPWD){
ArrayList myLi=(ArrayList)messages.get(userName);
String userPWD_chk=(String)myLi.get(1);
if(userPWD.equals(userPWD_chk))return true;
}
return false;
}
}
执行如下命令:
java2wsdl -cp . -cn samples.helloworld.service.axiom.HelloWorldService -of HelloWorldService.wsdl
打开生成的wsdl文件进行修改,删除文件中的下面代码:
该文件的内容如下:
保存文件,将其拷贝到。。。\resources\META-INF目录下,然后执行ant指令如下:
ant generate.service
提示信息如下:
Buildfile: build.xml
compile:
[javac] Compiling 3 source files to D:\eclipse\workspace\axiomproj\build\cla
sses
generate.service:
[jar] Warning: samples\helloworld\client\HelloWorldClient.class modified i
n the future.
[jar] Warning: samples\helloworld\service\axiom\HelloWorldService.class mo
dified in the future.
[jar] Warning: samples\helloworld\spring\biz\HelloSpring.class modified in
the future.
[jar] Building jar: D:\eclipse\workspace\axiomproj\build\HelloWorldService
.aar
BUILD SUCCESSFUL
Total time: 3 seconds
说明编译打包成功!
这时在build目录下会有一个HelloWorldService.aar文件。
将该文件拷贝到:
D:\tomcat6\deploy\axis2\WEB-INF\services
接下来就需要写一段客户端测试程序来看看我们的服务是否能够正常通信
package samples.helloworld.client;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
public class HelloWorldClient{
EndpointReference targetEPR=new EndpointReference("
http://localhost:8080/axis2/services/HelloWorldService
");
public OMElement callbckDwnLdAuthTran(String symbol,String userPWD, String transactionKey)throws Exception{
try{
OMFactory fac=OMAbstractFactory.getOMFactory();
OMNamespace omNs=fac.createOMNamespace("
http://axiom.service.helloworld.sample","tns
");
OMElement element=fac.createOMElement("getHelloWorldMs",omNs);
OMElement value1 = fac.createOMElement("symbol", omNs);
value1.addChild(fac.createOMText(value1, symbol));
element.addChild(value1);
OMElement value2=fac.createOMElement("userPWD",omNs);
value2.addChild(fac.createOMText(value2,userPWD));
element.addChild(value2);
OMElement value3 = fac.createOMElement("transactionKey", omNs);
value3.addChild(fac.createOMText(value3,transactionKey));
element.addChild(value3);
Options options=new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender=new ServiceClient();
sender.setOptions(options);
OMElement result=sender.sendReceive(element);
System.out.print(" waiting server response ............");
Thread.sleep(300);
System.out.println();
String code=null;
String description=null;
// String response=result.getFirstElement().getText();
OMElement symbolElement=result.getFirstElement();
code=symbolElement.getText();
OMElement priceElement=(OMElement)symbolElement.getNextOMSibling();
description=priceElement.getText();
System.out.println("Current Hello World of response--------->"+code);
System.out.println("********"+" Server Response "+"**********");
System.out.println(" Code : "+code+"");
System.out.println(" description : "+description+"");
System.out.println("******************************************");
System.out.println("\n\n\n");
return element;
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
public OMElement setHelloWorld(String symbol,String userPWD, String transactionKey)throws Exception{
try{
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("
http://axiom.service.helloworld.samples
", "tns");
OMElement method = fac.createOMElement("setHelloWorldMs", omNs);
OMElement value1 = fac.createOMElement("symbol", omNs);
value1.addChild(fac.createOMText(value1, symbol));
method.addChild(value1);
OMElement value2=fac.createOMElement("userPWD",omNs);
value2.addChild(fac.createOMText(value2,userPWD));
method.addChild(value2);
OMElement value3 = fac.createOMElement("transactionKey", omNs);
value3.addChild(fac.createOMText(value3,transactionKey));
method.addChild(value3);
Options options=new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender=new ServiceClient();
sender.setOptions(options);
sender.fireAndForget(method);
System.out.println("------------>DONE !");
Thread.sleep(300);
return method;
}catch(Exception e){
e.printStackTrace();
throw new Exception();
}
}
public OMElement calChkDnLDConfirm(String symbol,String userPWD, String transactionKey)throws Exception{
try{
OMFactory fac=OMAbstractFactory.getOMFactory();
OMNamespace omNs=fac.createOMNamespace("
http://axiom.service.helloworld.samples","tns
");
OMElement element=fac.createOMElement("getDownloadConfirm",omNs);
OMElement value1 = fac.createOMElement("symbol", omNs);
value1.addChild(fac.createOMText(value1, symbol));
element.addChild(value1);
OMElement value2=fac.createOMElement("userPWD",omNs);
value2.addChild(fac.createOMText(value2,userPWD));
element.addChild(value2);
OMElement value3 = fac.createOMElement("transactionKey", omNs);
value3.addChild(fac.createOMText(value3,transactionKey));
element.addChild(value3);
Options options=new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender=new ServiceClient();
sender.setOptions(options);
OMElement response=sender.sendReceive(element);
Thread.sleep(300);
OMElement va1=response.getFirstElement();
String code=va1.getText();
String val=((OMElement)va1.getNextOMSibling()).getText();
System.out.println("Download confirm information --------->"+code);
System.out.println("********"+" Server Response "+"**********");
System.out.println(" Code : "+code+"");
System.out.println(" description : "+val+"");
System.out.println("******************************************");
System.out.println("\n\n\n");
return element;
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
public static void main(String[] args){
HelloWorldClient helloWorldClient=new HelloWorldClient();
try{
helloWorldClient.setHelloWorld("Danlley","das4353dstg3t","324134321");
helloWorldClient.callbckDwnLdAuthTran("Danlley","das4353dstg3t","324134321");
for(int i=0;i
执行 ant run.client 后,运行结果如下:
Buildfile: build.xml
compile:
[javac] Compiling 3 source files to D:\eclipse\workspace\axiomproj\build\cla
sses
run.client:
[java] ------------>DONE !
[java] waiting server response ............
[java] Current Hello World of response--------->0
[java] ******** Server Response **********
[java] Code : 0
[java] description : Success
[java] ******************************************
[java]
[java]
[java]
[java]
[java] waiting server response ............
[java] Current Hello World of response--------->REQUEST_ERROR
[java] ******** Server Response **********
[java] Code : REQUEST_ERROR
[java] description : Invalid transactionKey format
[java] ******************************************
[java]
[java]
[java]
[java]
[java] waiting server response ............
[java] Current Hello World of response--------->SECURITY_ERROR
[java] ******** Server Response **********
[java] Code : SECURITY_ERROR
[java] description : Wrong Credentials or Permission Denied on t
his API
[java] ******************************************
[java]
[java]
[java]
[java]
[java] waiting server response ............
[java] Current Hello World of response--------->REQUEST_ERROR
[java] ******** Server Response **********
[java] Code : REQUEST_ERROR
[java] description : Invalid transactionKey
[java] ******************************************
[java]
[java]
[java]
[java]
[java] waiting server response ............
[java] Current Hello World of response--------->APPLICATION_ERROR
[java] ******** Server Response **********
[java] Code : APPLICATION_ERROR
[java] description : Undetected error on Web Service
[java] ******************************************
[java]
[java]
[java]
[java]
[java] waiting server response ............
[java] Current Hello World of response--------->REQUEST_ERROR
[java] ******** Server Response **********
[java] Code : REQUEST_ERROR
[java] description : Invalid transactionKey format
[java] ******************************************
[java]
[java]
[java]
[java]
[java] Download confirm information --------->0
[java] ******** Server Response **********
[java] Code : 0
[java] description : Success
[java] ******************************************
[java]
[java]
[java]
[java]
[java]
BUILD SUCCESSFUL
Total time: 10 seconds
到此,一个简单的WebService程序就已经可以正常运行了!
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22374/showart_272751.html |
|