1.
import java.net.MalformedURLException;java
import java.net.URL;web
import org.codehaus.xfire.client.Client;服務器
//引用的xfire.client.Client包
publicclass ServiceTest {
app
publicstaticvoid main(String[] args) throws MalformedURLException, Exception {框架
// 根據 wsdl建立客戶端
Client client =new Client(new URL(http://localhost:8080/項目名/services/service名?wsdl));
// 客戶端 反射 ws 方法與傳遞參數ide
Object[] results = client .invoke("sayHello", new Object[] { "Firends" });
url
System.out.println(results[0]);
}
}
spa
//這種方式的傳遞對於複雜對象是不成功的。可交互簡單類型的數據。.net
2.code
import java.net.MalformedURLException;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.yjm.ManagerService;
// 注意看引入的包,有些包是xfire提供的包。
public class ServiceTest {
public static void main(String[] args) {
Service ser = new ObjectServiceFactory() .create(ManagerService.class);
XFireProxyFactory xFactory = new XFireProxyFactory(XFireFactory .newInstance().getXFire());
String url = http://localhost:8080/項目名/services/service名;
try {
// ms與服務器端交互複雜對象類型
ManagerService ms= (ManagerService) factory.create( ser , url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
問題來了,不一樣java webservice框架之間是否能夠傳遞複雜對象類型。本人目前在作一個xfire與axis之間傳遞複雜對象的問題。 若是傳遞的參數是複雜類型的須要 拷貝接口信息到客戶端。若是返回類型是複雜類型的 須要再配置xml文件。若是返回的對象是複雜類型的 須要在 對象的包下配置 對象成員變量 複雜類型的映射,int string date 不用配置。若是返回的是集合 須要再接口下配置xml文件。xfire 默認的是沒有配置文件 加載默認的 ,有配置文件加載配置文件裏的。
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:my="http://webservice.cks.itrus.com/zdca">
<mapping name="my:QueryCertResult">
<property name="certInfoList" componentType="com.itrus.webserviceVO.CertInfo" />
</mapping>
</mappings>
成員變量 certInfoList list集合裏面的值是CertInfo對象須要配置一下。
接口方法配置,返回的是一個對象類型,該配置文件放在 接口包下
接口名.aegis.xml
<?xml version="1.0" encoding="UTF-8"?> <mappings> <mapping xmlns="http://webservice.cks.itrus.com/zdca"> <method name="queryCerts"> <parameter index="0" componentType="com.itrus.webserviceVO.UserInfo" /> <return-type componentType="com.itrus.webserviceVO.QueryCertResult" /> </method> </mapping> </mappings>
實體bean 配置,實體bean 成員變量有一個list集合 該配置文件放在bean包下
類名.aegis.xml
<?xml version="1.0" encoding="UTF-8"?> <mappings xmlns:my="http://webservice.cks.itrus.com/zdca"> <mapping name="my:QueryCertResult"> <property name="certInfoList" componentType="com.itrus.webserviceVO.CertInfo" /> </mapping> </mappings>