大家好,用xfire做了一个webservice,我服务器端和客户端都实现了值传递javabean。
现在要扩展一些功能,就是 客户段传递的复杂对象;
客户端-----》服务器端 1.客户端发送sendFunction(List):这个list里面封装的是javabean,服务器端返回 boolean型数据
客户端-----》服务器端 2.客户端发送getList(String str):要求服务器端返回一个list<javabean>
客户端-----》服务器端 3.客户端发送modList(String[] str):服务器端返回 boolean型数据
客户端-----》服务器端 4.客户端发送getListData(String str):服务器端返回 String[]数组
请问有哪位对这个比较熟悉,能否指点一下,或者给我一份参考,我在网上找了,但是也没有实现。
谢谢!
现在要扩展一些功能,就是 客户段传递的复杂对象;
客户端-----》服务器端 1.客户端发送sendFunction(List):这个list里面封装的是javabean,服务器端返回 boolean型数据
客户端-----》服务器端 2.客户端发送getList(String str):要求服务器端返回一个list<javabean>
客户端-----》服务器端 3.客户端发送modList(String[] str):服务器端返回 boolean型数据
客户端-----》服务器端 4.客户端发送getListData(String str):服务器端返回 String[]数组
请问有哪位对这个比较熟悉,能否指点一下,或者给我一份参考,我在网上找了,但是也没有实现。
谢谢!
可尝试一下XStream。
(1)在webservice工程下的WEB-INF增加一个配置文件server-config.wsdd,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="adminPassword" value="admin" />
<parameter name="enableNamespacePrefixOptimization"
value="true" />
<parameter name="dotNetSoapEncFix" value="true" />
<parameter name="disablePrettyXML" value="true" />
<parameter name="sendXsiTypes" value="true" />
<parameter name="sendMultiRefs" value="true" />
<parameter name="sendXMLDeclaration" value="true" />
<requestFlow name="RequestFlow1">
<handler name="Handler1"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler name="Handler2"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
</globalConfiguration>
<responseFlow name="ResponseFlow1">
<handler name="Handler1" type="LocalResponder" />
</responseFlow>
<handler name="Handler1" type="LocalResponder" />
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
<requestFlow name="RequestFlow1">
<handler name="Handler1" type="URLMapper" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService" />
<parameter name="enableRemoteAdmin" value="false" />
<parameter name="className" value="org.apache.axis.utils.Admin" />
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion" />
<parameter name="className" value="org.apache.axis.Version" />
</service> <!-- 开放一个服务 -->
<service name="gsStatus" provider="java:RPC">
<parameter name="allowedMethods" value="*" />
<parameter name="className"
value="web.GsStatusImp" />
<parameter name="scope" value="Request" />
<namespace>nss</namespace>
<beanMapping languageSpecificType="java:po.DeliveryInformation"
qname="ns:Messages"
xmlns:ns="urn:BeanService"/>
<beanMapping languageSpecificType="java:po.DeSOAPHeader"
qname="ns:DeSOAPHeader"
xmlns:ns="urn:BeanService"/>
</service>
<transport name="http">
<requestFlow name="RequestFlow1">
<handler name="Handler1" type="URLMapper" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
<parameter name="qs:list"
value="org.apache.axis.transport.http.QSListHandler" />
<parameter name="qs:wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
<parameter name="qs:method"
value="org.apache.axis.transport.http.QSMethodHandler" />
</transport>
<transport name="local">
<responseFlow name="ResponseFlow1">
<handler name="Handler1" type="LocalResponder" />
</responseFlow>
</transport>
</deployment>
(2)客户端如下:
package test;import java.net.MalformedURLException;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import po.DeliveryInformation;
public class TestWsUseAxis {
public static void main(String[] args) {
try {
String url = "http://219.148.199.4:9082/gsStatusWS/services/gsStatus";//状态报告
Service service = new Service();
Call call = (Call) service.createCall();
QName qn = new QName("urn:BeanService","Messages");
call.registerTypeMapping(DeliveryInformation.class,qn,new BeanSerializerFactory(DeliveryInformation.class, qn),new BeanDeserializerFactory(DeliveryInformation.class, qn));
call.setTargetEndpointAddress(new java.net.URL(url));
call.setOperationName(new QName("http://soapinterop.org/","notifySmsDeliveryReceipt")); //状态报告
String correlator = "correlator_value";
DeliveryInformation d = new DeliveryInformation();
d.setAddress("gz");
d.setDeliveryStatus("0");
call.invoke(new Object[]{correlator,d});
} catch (ServiceException e) {
e.printStackTrace();
System.out.println("Service 获取 Call对象失败!");
} catch (MalformedURLException e) {
e.printStackTrace();
System.out.println("new java.net.URL(url)错误!");
} catch (RemoteException e) {
e.printStackTrace();
System.out.println("远程错误!");
}
}
}
我修改了一下,如果要xfire结合spring,那么这个services.xml可以放到spring中去就可以。
spring中的配置。
<bean id="BbtForumService"
class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory" ref="xfire.serviceFactory" />
<property name="xfire" ref="xfire" />
<property name="serviceBean" ref="cmdbServiceImpl" />
<property name="serviceClass"
value="com.thbs.interact.webService.IcmdbDAO" />
<property name="name" value="cmdbService" />
</bean>
还有一点不是很明白,就是我把这个配置加到spring中了,但是空的services.xml一定要存在,如果删除这个文件,系统就报错。