- 浏览: 200914 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
RonQi:
受博文启发,自己实现了下
/**
* <pre&g ...
关于根据出生日期计算年龄的问题(js,java) -
ibad_boys:
实践证明,可用!
java 通过sftp服务器上传下载删除文件 -
accphc:
/**
* 计算年龄
* @param birth ...
关于根据出生日期计算年龄的问题(js,java) -
小迹_:
生日获取月份时为什么不+1?
关于根据出生日期计算年龄的问题(js,java) -
桃花源记:
正在找这个!
字母校验码
Axis客户端的几种实现方式
通过命令行实现,实在是太长了,于是按照网上的方式写在了bat文件中
set Axis_Lib=.\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=.\source
set Package= com.test.webservice.client
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% -uri currencyConvert.wsdl
以上就是bat文件的具体内容,命令的简单介绍
从最简单的开始 ,-uri 指定wsdl文件
> WSDL2Java -uri currencyConvert.wsdl
-d 使用不同的data binding方法
> WSDL2Java -uri currencyConvert.wsdl -d xmlbeans
-a 生成异步的方法
> WSDL2Java -uri currencyConvert.wsdl -a
-t 生成测试case
> WSDL2Java -uri currencyConvert.wsdl -t
稍微复杂一些的,-p可以指定生成的package,-o指定生成的路径,-ss生成服务端代码
客户端例子
package test;
import wsclient.myservices.*;
import java.net.URL;
import java.util.*;
import javax.xml.namespace.QName;
import org.apache.axis.client.*;
import org.apache.wsif.*;
import org.apache.wsif.wsdl.AuthenticatingProxyWSDLLocatorImpl;
/**
* axis1.x客户端调用测试
* @author peidw
*
*/
public class MyServiceExe {
/**
* 使用axis的WSDL2JAVA调用WS服务,如果服务器端添加了简单handler用户验证,则需要修改
* ..SoapBindingStub类的createCall()方法,
* @throws Exception
*/
public static void handlerCallDemo()throws Exception{
MyServicesService ms=new MyServicesServiceLocator();
MyServices_PortType msp=ms.getMyServices();
Book book=msp.getBookByIsbn("125-6922-10");
System.out.println(book.getAuthor()+"-"+book.getBookname()+"-"+book.getIsbn());
Map map=msp.getAllBookMap();
Set keyset=map.keySet();
Iterator it=keyset.iterator();
String tmp=null;
while(it.hasNext()){
tmp=(String)it.next();
System.out.println(tmp);
}
}
/**
* 通过动态接口方式调用,使用axis提供的client包
* 最简单的使用方式
* @throws Exception
*/
public static void dynamicCall()throws Exception{
String endpoint_1="http://localhost:8000/axis/services/Version?wsdl";
Service service = new Service();
Call call=(Call)service.createCall();
call.setOperationName(new QName(endpoint_1,"getVersion "));
call.setTargetEndpointAddress(new URL(endpoint_1));
String result=(String)call.invoke(new Object[]{});
System.out.println("result="+result);
}
/**
* 使用WSIF来调用axis发布的服务
* <pre>
* WSIF具有可对任何 Web 服务进行独立于绑定的访问的 API。
* 它紧密依赖于 WSDL,因此可以调用可在 WSDL 中描述的任何服务。
* </pre>
* @throws Exception
*/
public static void wsifCall()throws Exception {
String url="http://localhost:8000/axis/services/Version?wsdl";
WSIFServiceFactory factory=WSIFServiceFactory.newInstance();
//如果调用的方法需要进行用户/密码校验,需执行下面代码
//AuthenticatingProxyWSDLLocatorImpl awsli=new AuthenticatingProxyWSDLLocatorImpl(url,"gaolong1","19831001"); //验证连接
WSIFService service=factory.getService(url,"http://localhost:8000/axis/services/Version","VersionService","http://localhost:8000/axis/services/Version","Version");
WSIFPort port = service.getPort();
WSIFOperation operation = port.createOperation("getVersion","getVersionRequest",null);//根据给定的操作名称参数operationName,输入元素名称inputName,输出元素名称
WSIFMessage input = operation.createOutputMessage();//设置输入参数
WSIFMessage output = operation.createOutputMessage();//设置输出参数
WSIFMessage fault = operation.createFaultMessage(); //异常信息
operation.executeRequestResponseOperation(input,output,fault); //执行请求
System.out.println(output.getObjectPart("getVersionReturn"));
}
public static void main(String[] args)throws Exception{
handlerCallDemo();
dynamicCall();
wsifCall();
}
}
通常说Axis支持三种web service的部署和开发,分别为:
1、Dynamic Invocation Interface ( DII)
2、Stubs方式
3、Dynamic Proxy方式
上面的例子中方法一应该属于Stubs方式 ,方法二、三属于Dynamic Invocation Interface ( DII) 。
至于第三种模式在网上找到了这段代码
2、编写代理接口
public interface HelloClientInterface
extends java.rmi.Remote
{
public String getName(String name)
throws java.rmi.RemoteException;
}
3、编写并执行客户端程序TestHelloClient.java
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import java.net.URL;
import javax.xml.namespace.QName;
public class TestHelloClient
{
public static void main(String[] args)
{
try
{
String wsdlUrl =
"http://localhost:8080/Axis/HelloClient.jws?wsdl";
String nameSpaceUri =
"http://localhost:8080/Axis/HelloClient.jws";
String serviceName = "HelloClientService";
String portName = "HelloClient";
ServiceFactory serviceFactory =
ServiceFactory.newInstance();
Service afService =
serviceFactory.createService(new URL(wsdlUrl),
new QName(nameSpaceUri, serviceName));
HelloClientInterface proxy = (HelloClientInterface)
afService.getPort(new QName(
nameSpaceUri, portName),
HelloClientInterface.class);
System.out.println
("return value is "+proxy.getName("john") ) ;
}catch(Exception ex)
{
ex.printStackTrace() ;
}
}
}
个人觉得和DII方式没大区别,所以未做尝试,先mark一下。
对于第三方法中基于WSDL的客户端实现方式,由于我没有找到wsif的jar包,很遗憾没能尝试一下。不过刚好在公司用到过另外一种方法,那就是WSDL4j.jar包里的方法也可以Axis的客户端,貌似只支持String类型的请求参数,个人觉得不是很好用,不知道当前架构师为什么这么用。下面是具体实例
import org.apache.axis.Constants;
import org.apache.axis.encoding.ser.SimpleDeserializer;
import org.apache.axis.wsdl.gen.Parser;
import org.apache.axis.wsdl.symbolTable.*;
import javax.wsdl.*;
//import javax.wsdl.extensions.soap.SOAPAddress;
import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.encoding.Deserializer;
import javax.xml.rpc.encoding.DeserializerFactory;
import java.util.*;
//import localhost.axis.services;
// Web Service Dynamic Invoker
public class DynamicInvoker
{
private Parser wsdlParser = null;
private Map services = null;
public DynamicInvoker(String wsdlURL) throws Exception
{
wsdlParser = new Parser();
wsdlParser.run(wsdlURL);
services = enumSymTabEntry(ServiceEntry.class);
}
public Map invoke(String serviceName,
String portName,
String operationName,
Vector parameterValues) throws Exception
{
Vector inputs = new Vector();
String returnName = null;
ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
Service service = serviceEntry.getService();
org.apache.axis.client.Service clientService = new
org.apache.axis.client.Service(wsdlParser, service.getQName());
Call call = clientService.createCall(QName.valueOf(portName), QName.valueOf(operationName));
((org.apache.axis.client.Call) call).setTimeout(new Integer(15 * 1000));
BindingEntry bindingEntry = getBindingEntry(serviceName, portName);
Operation o = getOperation(bindingEntry, operationName);
Parameters parameters = bindingEntry.getParameters(o);
if (parameters.returnParam != null)
{
//QName returnType = org.apache.axis.wsdl.toJava.Utils.getXSIType(parameters.returnParam);
QName returnQName = parameters.returnParam.getQName();
returnName = returnQName.getLocalPart();
}
int size = parameters.list.size();
for (int i = 0; i < size; i++)
{
Parameter p = (Parameter) parameters.list.get(i);
switch (p.getMode())
{
case Parameter.IN :
inputs.add(getParamData((org.apache.axis.client.Call) call
, p
, (String) parameterValues.elementAt(i)));
break;
case Parameter.OUT :
break;
case Parameter.INOUT :
inputs.add(getParamData((org.apache.axis.client.Call) call,
p,
(String) parameterValues.elementAt(i)));
break;
}
}
Object ret = call.invoke(inputs.toArray());
Map outputs = call.getOutputParams();
HashMap map = new HashMap();
if (ret != null && returnName != null)
{
map.put(returnName, ret);
}
if (outputs != null)
{
for (Iterator i = outputs.keySet().iterator(); i.hasNext();)
{
Object obj = i.next();
String name;
Object value;
if (obj.getClass().getName().equals("java.lang.String"))
{
name = (String) obj;
}
else
{
name = ((QName) obj).getLocalPart();
}
value = outputs.get(obj);
map.put(name, value);
}
}
return map;
}
public Vector enumServiceNames()
{
Vector v = new Vector();
Iterator i = services.keySet().iterator();
while (i.hasNext())
{
String s = (String) i.next();
v.addElement(s);
}
return v;
}
public Vector enumPortNames(String serviceName)
{
Vector v = new Vector();
ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
Map ports = serviceEntry.getService().getPorts();
Iterator i = ports.keySet().iterator();
while (i.hasNext())
{
String s = (String) i.next();
v.addElement(s);
}
return v;
}
public Vector enumOperationNames(String serviceName, String portName)
{
Vector v = new Vector();
BindingEntry entry = getBindingEntry(serviceName, portName);
Set operations = entry.getOperations();
Iterator i = operations.iterator();
while (i.hasNext())
{
Operation o = (Operation) i.next();
String s = o.getName();
v.addElement(s);
}
return v;
}
public Parameters enumParameters(String serviceName
, String portName
, String operationName)
{
BindingEntry entry = getBindingEntry(serviceName, portName);
Operation o = getOperation(entry, operationName);
Parameters parameters = entry.getParameters(o);
return parameters;
}
public String getParameterModeString(Parameter p)
{
String ret = null;
switch (p.getMode())
{
case Parameter.IN:
ret = "[IN]";
break;
case Parameter.INOUT:
ret = "[IN, OUT]";
break;
case Parameter.OUT:
ret = "[OUT]";
break;
}
return ret;
}
private BindingEntry getBindingEntry(String serviceName, String portName)
{
ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
Port port = serviceEntry.getService().getPort(portName);
Binding binding = port.getBinding();
SymbolTable table = wsdlParser.getSymbolTable();
return table.getBindingEntry(binding.getQName());
}
private Operation getOperation(BindingEntry entry, String operationName)
{
Set operations = entry.getOperations();
Iterator i = operations.iterator();
while (i.hasNext())
{
Operation o = (Operation) i.next();
if (operationName.equals(o.getName()))
{
return o;
}
}
return null;
}
// return Map of <QName.getLocalPart, SymTabEntry>
private Map enumSymTabEntry(Class cls)
{
HashMap ret = new HashMap();
HashMap map = wsdlParser.getSymbolTable().getHashMap();
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext())
{
Map.Entry entry = (Map.Entry) iterator.next();
QName key = (QName) entry.getKey();
Vector v = (Vector) entry.getValue();
int size = v.size();
for (int i = 0; i < size; ++i)
{
SymTabEntry symTabEntry = (SymTabEntry) v.elementAt(i);
if (cls.isInstance(symTabEntry))
{
ret.put(key.getLocalPart(), symTabEntry);
}
}
}
return ret;
}
private Object getParamData(org.apache.axis.client.Call c, Parameter p,
String arg) throws Exception
{
// Get the QName representing the parameter type
QName paramType = org.apache.axis.wsdl.toJava.Utils.getXSIType(p);
TypeEntry type = p.getType();
if (type instanceof BaseType && ((BaseType) type).isBaseType())
{
DeserializerFactory factory = c.getTypeMapping().getDeserializer(paramType);
Deserializer deserializer = factory.getDeserializerAs(Constants.
AXIS_SAX);
if (deserializer instanceof SimpleDeserializer)
{
return ((SimpleDeserializer) deserializer).makeValue(arg);
}
}
throw new RuntimeException("not know how to convert '" + arg
+ "' into " + c);
}
}
class AppTest
{
public static void main(String[] args) throws Exception
{
System.out.println("Hello World!");
//动态调用 WebServics
String location = "http://localhost:1080/axis/services/Class1Service?wsdl";
DynamicInvoker invoker = new DynamicInvoker(location);
Vector vServices = invoker.enumServiceNames();
Object[] Services = vServices.toArray();
Arrays.sort(Services);
for (int i = 0; i < Services.length; i++)
{
String serviceName = (String) Services[i];
System.out.println(serviceName);
Vector V = invoker.enumPortNames(serviceName);
String portName = (String) V.elementAt(0);
V = invoker.enumOperationNames(serviceName, portName);
Object[] OperationNames = V.toArray();
Arrays.sort(OperationNames);
for (int j = 0; j < OperationNames.length; j++)
{
String operationName = (String) OperationNames[j];
System.out.println("\t" + (String) OperationNames[j]);
Parameters parameters = invoker.enumParameters(serviceName, portName, operationName);
Vector v = parameters.list;
Vector parameterValues = new Vector();
for (int k = 0; k < v.size(); k++)
{
Parameter para = (Parameter) v.elementAt(k);
System.out.print("\t\t" + para.getQName().getLocalPart());
if (para.getType().getQName().getLocalPart().equals("string"))
{
parameterValues.addElement("asdasdas");
}
else
{
parameterValues.addElement(null);
}
System.out.print("\t" + para.getType().getQName().getLocalPart());
System.out.println("\t" + invoker.getParameterModeString(para));
}
Map result = invoker.invoke(serviceName, portName, operationName, parameterValues);
for (Iterator it = result.keySet().iterator(); it.hasNext();)
{
String name = (String) it.next();
Object value = result.get(name);
String line;
if (value != null)
{
line = name + "=" + result.get(name).toString() + "\n";
}
else
{
line = name + "=(null)\n";
}
System.out.println(line);
}
}
}
set Axis_Lib=.\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=.\source
set Package= com.test.webservice.client
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% -uri currencyConvert.wsdl
以上就是bat文件的具体内容,命令的简单介绍
从最简单的开始 ,-uri 指定wsdl文件
> WSDL2Java -uri currencyConvert.wsdl
-d 使用不同的data binding方法
> WSDL2Java -uri currencyConvert.wsdl -d xmlbeans
-a 生成异步的方法
> WSDL2Java -uri currencyConvert.wsdl -a
-t 生成测试case
> WSDL2Java -uri currencyConvert.wsdl -t
稍微复杂一些的,-p可以指定生成的package,-o指定生成的路径,-ss生成服务端代码
客户端例子
package test;
import wsclient.myservices.*;
import java.net.URL;
import java.util.*;
import javax.xml.namespace.QName;
import org.apache.axis.client.*;
import org.apache.wsif.*;
import org.apache.wsif.wsdl.AuthenticatingProxyWSDLLocatorImpl;
/**
* axis1.x客户端调用测试
* @author peidw
*
*/
public class MyServiceExe {
/**
* 使用axis的WSDL2JAVA调用WS服务,如果服务器端添加了简单handler用户验证,则需要修改
* ..SoapBindingStub类的createCall()方法,
* @throws Exception
*/
public static void handlerCallDemo()throws Exception{
MyServicesService ms=new MyServicesServiceLocator();
MyServices_PortType msp=ms.getMyServices();
Book book=msp.getBookByIsbn("125-6922-10");
System.out.println(book.getAuthor()+"-"+book.getBookname()+"-"+book.getIsbn());
Map map=msp.getAllBookMap();
Set keyset=map.keySet();
Iterator it=keyset.iterator();
String tmp=null;
while(it.hasNext()){
tmp=(String)it.next();
System.out.println(tmp);
}
}
/**
* 通过动态接口方式调用,使用axis提供的client包
* 最简单的使用方式
* @throws Exception
*/
public static void dynamicCall()throws Exception{
String endpoint_1="http://localhost:8000/axis/services/Version?wsdl";
Service service = new Service();
Call call=(Call)service.createCall();
call.setOperationName(new QName(endpoint_1,"getVersion "));
call.setTargetEndpointAddress(new URL(endpoint_1));
String result=(String)call.invoke(new Object[]{});
System.out.println("result="+result);
}
/**
* 使用WSIF来调用axis发布的服务
* <pre>
* WSIF具有可对任何 Web 服务进行独立于绑定的访问的 API。
* 它紧密依赖于 WSDL,因此可以调用可在 WSDL 中描述的任何服务。
* </pre>
* @throws Exception
*/
public static void wsifCall()throws Exception {
String url="http://localhost:8000/axis/services/Version?wsdl";
WSIFServiceFactory factory=WSIFServiceFactory.newInstance();
//如果调用的方法需要进行用户/密码校验,需执行下面代码
//AuthenticatingProxyWSDLLocatorImpl awsli=new AuthenticatingProxyWSDLLocatorImpl(url,"gaolong1","19831001"); //验证连接
WSIFService service=factory.getService(url,"http://localhost:8000/axis/services/Version","VersionService","http://localhost:8000/axis/services/Version","Version");
WSIFPort port = service.getPort();
WSIFOperation operation = port.createOperation("getVersion","getVersionRequest",null);//根据给定的操作名称参数operationName,输入元素名称inputName,输出元素名称
WSIFMessage input = operation.createOutputMessage();//设置输入参数
WSIFMessage output = operation.createOutputMessage();//设置输出参数
WSIFMessage fault = operation.createFaultMessage(); //异常信息
operation.executeRequestResponseOperation(input,output,fault); //执行请求
System.out.println(output.getObjectPart("getVersionReturn"));
}
public static void main(String[] args)throws Exception{
handlerCallDemo();
dynamicCall();
wsifCall();
}
}
通常说Axis支持三种web service的部署和开发,分别为:
1、Dynamic Invocation Interface ( DII)
2、Stubs方式
3、Dynamic Proxy方式
上面的例子中方法一应该属于Stubs方式 ,方法二、三属于Dynamic Invocation Interface ( DII) 。
至于第三种模式在网上找到了这段代码
2、编写代理接口
public interface HelloClientInterface
extends java.rmi.Remote
{
public String getName(String name)
throws java.rmi.RemoteException;
}
3、编写并执行客户端程序TestHelloClient.java
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import java.net.URL;
import javax.xml.namespace.QName;
public class TestHelloClient
{
public static void main(String[] args)
{
try
{
String wsdlUrl =
"http://localhost:8080/Axis/HelloClient.jws?wsdl";
String nameSpaceUri =
"http://localhost:8080/Axis/HelloClient.jws";
String serviceName = "HelloClientService";
String portName = "HelloClient";
ServiceFactory serviceFactory =
ServiceFactory.newInstance();
Service afService =
serviceFactory.createService(new URL(wsdlUrl),
new QName(nameSpaceUri, serviceName));
HelloClientInterface proxy = (HelloClientInterface)
afService.getPort(new QName(
nameSpaceUri, portName),
HelloClientInterface.class);
System.out.println
("return value is "+proxy.getName("john") ) ;
}catch(Exception ex)
{
ex.printStackTrace() ;
}
}
}
个人觉得和DII方式没大区别,所以未做尝试,先mark一下。
对于第三方法中基于WSDL的客户端实现方式,由于我没有找到wsif的jar包,很遗憾没能尝试一下。不过刚好在公司用到过另外一种方法,那就是WSDL4j.jar包里的方法也可以Axis的客户端,貌似只支持String类型的请求参数,个人觉得不是很好用,不知道当前架构师为什么这么用。下面是具体实例
import org.apache.axis.Constants;
import org.apache.axis.encoding.ser.SimpleDeserializer;
import org.apache.axis.wsdl.gen.Parser;
import org.apache.axis.wsdl.symbolTable.*;
import javax.wsdl.*;
//import javax.wsdl.extensions.soap.SOAPAddress;
import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.encoding.Deserializer;
import javax.xml.rpc.encoding.DeserializerFactory;
import java.util.*;
//import localhost.axis.services;
// Web Service Dynamic Invoker
public class DynamicInvoker
{
private Parser wsdlParser = null;
private Map services = null;
public DynamicInvoker(String wsdlURL) throws Exception
{
wsdlParser = new Parser();
wsdlParser.run(wsdlURL);
services = enumSymTabEntry(ServiceEntry.class);
}
public Map invoke(String serviceName,
String portName,
String operationName,
Vector parameterValues) throws Exception
{
Vector inputs = new Vector();
String returnName = null;
ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
Service service = serviceEntry.getService();
org.apache.axis.client.Service clientService = new
org.apache.axis.client.Service(wsdlParser, service.getQName());
Call call = clientService.createCall(QName.valueOf(portName), QName.valueOf(operationName));
((org.apache.axis.client.Call) call).setTimeout(new Integer(15 * 1000));
BindingEntry bindingEntry = getBindingEntry(serviceName, portName);
Operation o = getOperation(bindingEntry, operationName);
Parameters parameters = bindingEntry.getParameters(o);
if (parameters.returnParam != null)
{
//QName returnType = org.apache.axis.wsdl.toJava.Utils.getXSIType(parameters.returnParam);
QName returnQName = parameters.returnParam.getQName();
returnName = returnQName.getLocalPart();
}
int size = parameters.list.size();
for (int i = 0; i < size; i++)
{
Parameter p = (Parameter) parameters.list.get(i);
switch (p.getMode())
{
case Parameter.IN :
inputs.add(getParamData((org.apache.axis.client.Call) call
, p
, (String) parameterValues.elementAt(i)));
break;
case Parameter.OUT :
break;
case Parameter.INOUT :
inputs.add(getParamData((org.apache.axis.client.Call) call,
p,
(String) parameterValues.elementAt(i)));
break;
}
}
Object ret = call.invoke(inputs.toArray());
Map outputs = call.getOutputParams();
HashMap map = new HashMap();
if (ret != null && returnName != null)
{
map.put(returnName, ret);
}
if (outputs != null)
{
for (Iterator i = outputs.keySet().iterator(); i.hasNext();)
{
Object obj = i.next();
String name;
Object value;
if (obj.getClass().getName().equals("java.lang.String"))
{
name = (String) obj;
}
else
{
name = ((QName) obj).getLocalPart();
}
value = outputs.get(obj);
map.put(name, value);
}
}
return map;
}
public Vector enumServiceNames()
{
Vector v = new Vector();
Iterator i = services.keySet().iterator();
while (i.hasNext())
{
String s = (String) i.next();
v.addElement(s);
}
return v;
}
public Vector enumPortNames(String serviceName)
{
Vector v = new Vector();
ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
Map ports = serviceEntry.getService().getPorts();
Iterator i = ports.keySet().iterator();
while (i.hasNext())
{
String s = (String) i.next();
v.addElement(s);
}
return v;
}
public Vector enumOperationNames(String serviceName, String portName)
{
Vector v = new Vector();
BindingEntry entry = getBindingEntry(serviceName, portName);
Set operations = entry.getOperations();
Iterator i = operations.iterator();
while (i.hasNext())
{
Operation o = (Operation) i.next();
String s = o.getName();
v.addElement(s);
}
return v;
}
public Parameters enumParameters(String serviceName
, String portName
, String operationName)
{
BindingEntry entry = getBindingEntry(serviceName, portName);
Operation o = getOperation(entry, operationName);
Parameters parameters = entry.getParameters(o);
return parameters;
}
public String getParameterModeString(Parameter p)
{
String ret = null;
switch (p.getMode())
{
case Parameter.IN:
ret = "[IN]";
break;
case Parameter.INOUT:
ret = "[IN, OUT]";
break;
case Parameter.OUT:
ret = "[OUT]";
break;
}
return ret;
}
private BindingEntry getBindingEntry(String serviceName, String portName)
{
ServiceEntry serviceEntry = (ServiceEntry) services.get(serviceName);
Port port = serviceEntry.getService().getPort(portName);
Binding binding = port.getBinding();
SymbolTable table = wsdlParser.getSymbolTable();
return table.getBindingEntry(binding.getQName());
}
private Operation getOperation(BindingEntry entry, String operationName)
{
Set operations = entry.getOperations();
Iterator i = operations.iterator();
while (i.hasNext())
{
Operation o = (Operation) i.next();
if (operationName.equals(o.getName()))
{
return o;
}
}
return null;
}
// return Map of <QName.getLocalPart, SymTabEntry>
private Map enumSymTabEntry(Class cls)
{
HashMap ret = new HashMap();
HashMap map = wsdlParser.getSymbolTable().getHashMap();
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext())
{
Map.Entry entry = (Map.Entry) iterator.next();
QName key = (QName) entry.getKey();
Vector v = (Vector) entry.getValue();
int size = v.size();
for (int i = 0; i < size; ++i)
{
SymTabEntry symTabEntry = (SymTabEntry) v.elementAt(i);
if (cls.isInstance(symTabEntry))
{
ret.put(key.getLocalPart(), symTabEntry);
}
}
}
return ret;
}
private Object getParamData(org.apache.axis.client.Call c, Parameter p,
String arg) throws Exception
{
// Get the QName representing the parameter type
QName paramType = org.apache.axis.wsdl.toJava.Utils.getXSIType(p);
TypeEntry type = p.getType();
if (type instanceof BaseType && ((BaseType) type).isBaseType())
{
DeserializerFactory factory = c.getTypeMapping().getDeserializer(paramType);
Deserializer deserializer = factory.getDeserializerAs(Constants.
AXIS_SAX);
if (deserializer instanceof SimpleDeserializer)
{
return ((SimpleDeserializer) deserializer).makeValue(arg);
}
}
throw new RuntimeException("not know how to convert '" + arg
+ "' into " + c);
}
}
class AppTest
{
public static void main(String[] args) throws Exception
{
System.out.println("Hello World!");
//动态调用 WebServics
String location = "http://localhost:1080/axis/services/Class1Service?wsdl";
DynamicInvoker invoker = new DynamicInvoker(location);
Vector vServices = invoker.enumServiceNames();
Object[] Services = vServices.toArray();
Arrays.sort(Services);
for (int i = 0; i < Services.length; i++)
{
String serviceName = (String) Services[i];
System.out.println(serviceName);
Vector V = invoker.enumPortNames(serviceName);
String portName = (String) V.elementAt(0);
V = invoker.enumOperationNames(serviceName, portName);
Object[] OperationNames = V.toArray();
Arrays.sort(OperationNames);
for (int j = 0; j < OperationNames.length; j++)
{
String operationName = (String) OperationNames[j];
System.out.println("\t" + (String) OperationNames[j]);
Parameters parameters = invoker.enumParameters(serviceName, portName, operationName);
Vector v = parameters.list;
Vector parameterValues = new Vector();
for (int k = 0; k < v.size(); k++)
{
Parameter para = (Parameter) v.elementAt(k);
System.out.print("\t\t" + para.getQName().getLocalPart());
if (para.getType().getQName().getLocalPart().equals("string"))
{
parameterValues.addElement("asdasdas");
}
else
{
parameterValues.addElement(null);
}
System.out.print("\t" + para.getType().getQName().getLocalPart());
System.out.println("\t" + invoker.getParameterModeString(para));
}
Map result = invoker.invoke(serviceName, portName, operationName, parameterValues);
for (Iterator it = result.keySet().iterator(); it.hasNext();)
{
String name = (String) it.next();
Object value = result.get(name);
String line;
if (value != null)
{
line = name + "=" + result.get(name).toString() + "\n";
}
else
{
line = name + "=(null)\n";
}
System.out.println(line);
}
}
}
- testWSDL2Java.rar (4 MB)
- 下载次数: 154
相关推荐
【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...
Axis2是Apache组织下的一个开源项目,它是一种高性能、轻量级的Web服务框架,支持SOAP和REST等协议,能够帮助开发者轻松地构建和部署Web服务。Axis2提供了一套完整的工具链,包括用于生成客户端和服务端代码的工具,...
总的来说,使用Axis2客户端调用WebService接口是一种常见的开发实践,通过精简jar包可以优化项目的体积,提高部署效率。理解这个过程并掌握如何精简jar包,对于任何涉及到Web服务的开发工作都是十分有益的。
本文详细介绍了如何构建Apache Axis 1.4的服务端和客户端,包括必要的准备工作、项目创建和配置、服务接口的实现以及客户端的创建。通过遵循这些步骤,可以有效地搭建起一个基于SOAP的Web服务系统,从而实现跨平台的...
CXF、AXIS2、XFire是三种流行的Java Web服务框架,它们允许开发者创建和消费Web服务。在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会...
本文将深入探讨AXIS2客户端调用的几种常见方式,以帮助开发者更好地理解和应用这一强大的工具。 首先,我们要理解AXIS2的核心概念。AXIS2是一个Java Web服务实现库,它提供了服务的全生命周期管理,包括服务的创建...
myeclipse安装axis2.txt文件:详细说明了myeclipse如何安装axis2插件,以及编写简单的服务端代码,以及axis2客户端访问服务端的几种方式。 axisdemo是一个普通的javaweb工程,里面有一个简单的接口,在此工程的基础...
本篇文章将深入探讨如何使用AXIS生成客户端代码,同时介绍与之相关的几个重要库文件:mail.jar, activation.jar, xalan.jar以及xmlsec.jar。 首先,让我们了解一下AXIS生成客户端的两种基本方法: 1. **WSDL2Java...
在本篇博文中,我们将深入探讨AXIS如何帮助开发者在Java环境中实现Web服务的开发。 首先,Web服务是一种通过互联网进行通信的应用程序接口(API)。它们允许不同的系统之间交换数据,不受平台或编程语言的限制。...
在axis2+spring的环境下,可以通过两种方式处理session: - **SOAP Header**:可以将session信息封装在SOAP消息的Header部分,每次请求时携带。 - **Cookie**:客户端和服务端可以通过Cookie来维护会话状态,但...
本文将详细介绍使用CXF作为客户端调用Web服务的几种方法,并结合示例解释相关知识点。 1. **CXF客户端调用** CXF是一个开源的Java框架,它支持多种Web服务标准,包括JAX-WS和JAX-RS。对于客户端调用,CXF提供了一...
在压缩包"Axis2客户端测试"中,可能包含了一个完整的示例客户端项目,你可以参考其中的代码结构和调用方式。 通过这个过程,你不仅可以掌握如何使用Apache Axis2创建Web服务客户端,还能了解到Web服务的基本概念和...
在描述中提到的“之前公司用了webservice搞了好就 写了好几种”,这可能意味着使用Axis2来实现不同类型的Web服务接口,或者在不同的项目中进行了多次的Web服务开发。 **标签:** 1. **Java** - Axis2是基于Java...
myeclipse安装axis2.txt文件:详细说明了myeclipse如何安装axis2插件,以及编写简单的服务端代码,以及axis2客户端访问服务端的几种方式。 axisdemo是一个普通的javaweb工程,里面有一个简单的接口,在此工程的基础...
AXIS2提供了一种直观的方式来创建和部署Web服务。服务器端代码可能包括了服务接口定义(如使用JAX-WS规范的@WebService注解),以及其实现类,这些类包含了业务逻辑,比如验证用户输入的登录信息,查询数据库,然后...
客户端可以通过多种方式调用AXIS2发布的Web服务: - 使用AXIS2的客户端API,如Stub类,直接编程调用。 - 通过SOAP消息直接发送请求,可以使用各种HTTP客户端库,如Apache HttpClient。 - 利用AXIS2生成的客户端...
本文将深入探讨在Java环境中调用WebService的五种主要方式:Axis、CXF、HttpClient、MyEclipse反向生成以及XFire。 1. Axis:Apache Axis是最早且广泛使用的SOAP库,用于创建和消费Web服务。使用Axis调用WebService...
本文将详细介绍四种常见的 WebService 发布方式及其客户端调用方法,包括 CXF、XFire、AXIS1 和 AXIS2,并结合实际案例进行分析。 #### 二、CXF 方式 **1. 概述** - CXF 是 Apache 的一款开源框架,它提供了强大...
在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同应用程序之间进行数据交换。当我们谈论 Axis2 时,我们指的是一个高效、灵活且强大的Web服务框架,它是Apache软件基金会开发的。Axis2 是用于构建和部署Web...