axios 调用EventStream axis 动态调用
转载
一份Axis2 webService及动态客户段调运的例子
配置:最好copy Axis2下载包中的模板项目,然后添加所需的类库及修改配置文件。
Web.xml配置:
<?xmlversion="1.0" encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>as</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:META-INF/spring/*.xml</param-value>
</context-param>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>AxisAdminServlet</servlet-name>
<servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisAdminServlet</servlet-name>
<url-pattern>/axis2-admin/*</url-pattern>
</servlet-mapping>
<mime-mapping>
<extension>inc</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>/axis2-web/index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/axis2-web/Error/error404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/axis2-web/Error/error500.jsp</location>
</error-page>
</web-app>
|
WEB-INFO文件夹下面建立services文件夹
并在services建立一个文件夹名称任一,例如ws,在其中依次添加META-INF文件夹和services.xml,目录结构如下:
Services.xml配置,集成了spring:
<?xmlversion="1.0" encoding="UTF-8"?>
<serviceGroup>
<servicename="CustomerService">
<description> </description>
<parametername="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
</parameter>
<parametername="SpringBeanName">CustomerService</parameter>
<operationname="getCustomer">
<!--
<messageReceiver
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
RPCMessageReceiver <messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
-->
<messageReceivermep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
<servicename="ComplexTypeService">
<description> </description>
<parametername="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
</parameter>
<parametername="SpringBeanName">ComplexTypeService</parameter>
<messageReceivers>
<messageReceivermep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
<moduleref="rampart" />
<parametername="InflowSecurity">
<action>
<items>UsernameToken Timestamp</items>
<passwordCallbackClass>services.handler.PWDHandler
</passwordCallbackClass>
</action>
</parameter>
</service>
</serviceGroup>
|
Service代码:
package services;
import java.io.FileOutputStream;
publicclass ComplexTypeService {
// 上传图像,imageByte参数表示上传图像文件的字节,
// length参数表示图像文件的字节长度(该参数值可能小于imageByte的数组长度)
publicboolean uploadImageWithByte(byte[] imageByte, int length) {
FileOutputStream fos = null;
try {
// 将上传的图像保存在D盘的test1.jpg文件中
fos = new FileOutputStream("d://test1.jpg");
// 开始写入图像文件的字节
fos.write(imageByte, 0, length);
fos.close();
} catch (Exception e) {
returnfalse;
} finally {
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
}
}
}
returntrue;
}
// 返回一维字符串数组
public String[] getArray() {
String[] strArray = new String[] { "自行车", "飞机", "火箭" };
return strArray;
}
// 返回二维字符串数组
public String[] getMDArray() {
String[] strArray = new String[] { "自行车,飞机,火箭", "中国,美国,德国",
"超人,蜘蛛侠,钢铁侠" };
return strArray;
}
// 返回DataForm类的对象实例
public DataForm getDataForm() {
returnnew DataForm();
}
// 将DataForm类的对象实例序列化,并返回序列化后的字节数组
publicbyte[] getDataFormBytes() throws Exception {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(baos);
oos.writeObject(new DataForm());
return baos.toByteArray();
}
}
|
package services;
import java.io.Serializable;
publicclass DataForm implements Serializable {
privatestaticfinallongserialVersionUID = 1455026627782545535L;
private String name = "bill";
privateint age = 20;
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getAge() {
return age;
}
publicvoid setAge(int age) {
this.age = age;
}
}
|
客户端调用:
客户端调用可以采用stub方式,用wsdl2java生成代码.
这儿是通用的动态调用方式,代码:
package axis2.client;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
publicclass Axis2ClientUtilsForRPC {
private RPCServiceClient serviceClient;
private String wsAddress;
private String namespaceURI;
public Axis2ClientUtilsForRPC() {
}
public Axis2ClientUtilsForRPC(String wsAddress, String namespaceURI) {
this.init(wsAddress, namespaceURI);
}
publicvoid init(String wsAddress, String namespaceURI) {
this.setWsAddress(wsAddress);
this.setNamespaceURI(namespaceURI);
this.init();
}
publicvoid init() {
try {
serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(wsAddress);
options.setTo(targetEPR);
} catch (AxisFault e) {
e.printStackTrace();
}
}
publicClass[] classes) {
Object[] o = null;
try {
QName opAddEntry = new QName(namespaceURI, methodName);
o = serviceClient.invokeBlocking(opAddEntry, args, classes);
} catch (AxisFault e) {
e.printStackTrace();
}
return o;
}
public Object invokeForObject(String methodName, Object[] args,
Class[] classes) {
Object o = null;
try {
QName opAddEntry = new QName(namespaceURI, methodName);
Object[] objects = serviceClient.invokeBlocking(opAddEntry, args,
classes);
if (objects != null && objects.length > 0) {
o = objects[0];
}
} catch (AxisFault e) {
e.printStackTrace();
}
return o;
}
public String getNamespaceURI() {
return namespaceURI;
}
publicvoid setNamespaceURI(String namespaceURI) {
this.namespaceURI = namespaceURI;
}
public String getWsAddress() {
return wsAddress;
}
publicvoid setWsAddress(String wsAddress) {
this.wsAddress = wsAddress;
}
}
|
测试代码:
package s1;
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Arrays;
import org.junit.Test;
import services.ComplexTypeServiceStub;
import axis2.client.Axis2ClientUtilsForRPC;
publicclass ComplexTypeServiceTest {
Axis2ClientUtilsForRPC client = new Axis2ClientUtilsForRPC(
"http://127.0.0.1:8080/as/services/ComplexTypeService",
"http://services");
@Test
publicvoid testUploadImageWithByte() {
Object[] opAddEntryArgs;
Class[] classes;
try {
// 打开图像文件,确定图像文件的大小
java.io.File file = new java.io.File("f://1.jpg");
java.io.FileInputStream fis = new java.io.FileInputStream(file);
// 创建保存要上传的图像文件内容的字节数组
byte[] buffer = newbyte[(int) file.length()];
// 将图像文件的内容读取buffer数组中
int n = fis.read(buffer);
System.out.println("文件长度:" + file.length());
opAddEntryArgs = new Object[] { buffer, n };
classes = new Class[] { Boolean.class };
fis.close();
// 开始上传图像文件,并输出uploadImageWithByte方法的返回传
System.out.println(client.invoke("uploadImageWithByte",
opAddEntryArgs, classes)[0]);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
publicvoid testGetArray() {
String[] v = (String[]) client.invokeForObject("getArray",
new Object[] {}, new Class[] { String[].class });
System.out.println(Arrays.asList(v));
}
@Test
publicvoid testGetMDArray() {
String[] v = (String[]) client.invokeForObject("getMDArray",
new Object[] {}, new Class[] { String[].class });
System.out.println(Arrays.asList(v));
}
@Test
publicvoid testGetDataForm() {
Class[] returnTypes = new Class[] { ComplexTypeServiceStub.DataForm.class };
// 调用远程服务,得到返回的object数组
Object[] response = client.invoke("getDataForm", new Object[] {},
returnTypes);
// 强制转换成 对象
ComplexTypeServiceStub.DataForm form = (ComplexTypeServiceStub.DataForm) response[0];
System.out.println("DataForm: name:" + form.getName() + ",age:"
+ form.getAge());
}
@Test
publicvoid testGetDataFormBytes() {
try {
byte[] v = (byte[]) client.invokeForObject("getDataFormBytes",
new Object[] {}, new Class[] { byte[].class });
ObjectInputStream o = new ObjectInputStream(
new ByteArrayInputStream(v));
Object object = o.readObject();
services.DataForm form1 = (services.DataForm) object;
System.out.println("DataForm: name:" + form1.getName() + ",age:"
+ form1.getAge());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package s1;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.rmi.RemoteException;
import java.util.Arrays;
import javax.activation.DataHandler;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
import services.ComplexTypeServiceStub;
import services.ExceptionException0;
import services.ComplexTypeServiceStub.DataForm;
import services.ComplexTypeServiceStub.UploadImageWithByteResponse;
publicclass Main {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
c2();
}
privatestaticvoidc1()
try {
s1.CustomerServiceStub stub = new s1.CustomerServiceStub(
"http://127.0.0.1:8080/as/services/CustomerService");
s1.CustomerServiceStub.GetCustomer c = new CustomerServiceStub.GetCustomer();
c.setCustId(111050l);
System.out.println(stub.getCustomer(c).get_return());
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
privatestaticvoid c2() {
try {
ComplexTypeServiceStub stub = new ComplexTypeServiceStub();
// 调用一维数组
ComplexTypeServiceStub.GetArrayResponse res1 = stub.getArray();
System.out.println(Arrays.asList(res1.get_return()));
// 调用二维数组
ComplexTypeServiceStub.GetMDArrayResponse res2 = stub.getMDArray();
System.out.println(Arrays.asList(res2.get_return()));
// DataForm类的对象实例
ComplexTypeServiceStub.GetDataFormResponse res3 = stub
.getDataForm();
DataForm form = res3.get_return();
System.out.println("DataForm: name:" + form.getName() + ",age:"
+ form.getAge());
// 将DataForm类的对象实例序列化,并返回序列化后的字节数组
ComplexTypeServiceStub.GetDataFormBytesResponse res4 = stub
.getDataFormBytes();
DataHandler dh = res4.get_return();
try {
ObjectInputStream o = new ObjectInputStream(dh.getInputStream());
Object object = o.readObject();
services.DataForm form1 = (services.DataForm) object;
System.out.println("DataForm: name:" + form1.getName()
+ ",age:" + form1.getAge());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 二进制图像
ComplexTypeServiceStub.UploadImageWithByte byte1 = new ComplexTypeServiceStub.UploadImageWithByte();
try {
// 打开图像文件,确定图像文件的大小
java.io.File file = new java.io.File("f://1.jpg");
java.io.FileInputStream fis = new java.io.FileInputStream(file);
// 创建保存要上传的图像文件内容的字节数组
byte[] buffer = newbyte[(int) file.length()];
// 将图像文件的内容读取buffer数组中
int n = fis.read(buffer);
System.out.println("文件长度:" + file.length());
Object[] opAddEntryArgsnew Object[] { buffer, n };
Class[] classesnew Class[] { Boolean.class };
fis.close();
UploadImageWithByteResponse res5 = stub
.uploadImageWithByte(byte1);
res5.get_return();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ExceptionException0 e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
privatestaticvoidc3()
try {
RPCServiceClient client = new RPCServiceClient();
Options option = client.getOptions();
// 指定客户端访问的webservice服务器端地址
EndpointReference erf = new EndpointReference(
"http://127.0.0.1:8080/as/services/ComplexTypeService");
option.setTo(erf);
// 指定命名空间,指定要调用的方法
QName name = new QName("http://services", "getDataForm");
// 创建返回的参数类型
Class[] returnTypes = new Class[] { ComplexTypeServiceStub.DataForm.class };
// 调用远程服务,得到返回的object数组
Object[] response = client.invokeBlocking(name, new Object[] {},
returnTypes);
// 强制转换成 对象
ComplexTypeServiceStub.DataForm form = (ComplexTypeServiceStub.DataForm) response[0];
System.out.println("DataForm: name:" + form.getName() + ",age:"
+ form.getAge());
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
privatestaticvoidc4()
try {
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(
"http://127.0.0.1:8080/as/services/ComplexTypeService");
options.setTo(targetEPR);
// 下面的代码调用uploadImageWithByte方法上传图像文件
// ///
// 打开图像文件,确定图像文件的大小
java.io.File file = new java.io.File("f://1.jpg");
java.io.FileInputStream fis = new java.io.FileInputStream(file);
// 创建保存要上传的图像文件内容的字节数组
byte[] buffer = newbyte[(int) file.length()];
// 将图像文件的内容读取buffer数组中
int n = fis.read(buffer);
System.out.println("文件长度:" + file.length());
Object[] opAddEntryArgs = new Object[] { buffer, n };
Class[] classes = new Class[] { Boolean.class };
QName opAddEntry = new QName("http://services",
"uploadImageWithByte");
fis.close();
// 开始上传图像文件,并输出uploadImageWithByte方法的返回传
System.out.println(serviceClient.invokeBlocking(opAddEntry,
opAddEntryArgs, classes)[0]);
} catch (AxisFault e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
|
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。