xFire客户端生成及使用
1.xFire客户端生成
右键项目名称,new —other ,选择Code generation from WSDL document
填写WSDL地址或者文件路径,(由客户端提供),已经生成代码存放的路径
生成的文件如下:
2.配置weblogic启动项
1.由于xFire需要的jar,会与weblogic自带的jar文件产生冲突,所以weblogic启动时需要先加载一些jar :
2.修改weblogic的启动配置。对d进行编辑,到set CLASSPATH = 设置
的地方,加上需要载入的jar,如:
set CLASSPATH= %MEDREC_WEBLOGIC_CLASSPATH%
修改成:(假设以上jar包存放在E:\lib\下面)
set CLASSPATH=E:\lib\xfire-aegis-1.2.6.jar;
E:\lib\xfire-jaxb2-1.2.6.jar;E:\lib\xfire-jsr181-api-1.0-M1.jar;
E:\lib\qname.jar;E:\lib\wsdl4j-1.5.2.jar;E:\lib\jdom-1.0.jar;
E:\lib\xfire-all-1.2.6.jar;E:\lib\jaxb-api-2.0.jar;E:\lib\commons-httpclient-3.0.jar;
E:\lib\commons-codec-1.3.jar;E:\lib\commons-beanutils-1.7.0.jar;
E:\lib\commons-beanutils-1.7.0.jar;E:\lib\commons-logging-1.0.4.jar;
E:\lib\log4j-1.2.13.jar;
%CLASSPATH%;%MEDREC_WEBLOGIC_CLASSPATH%
如何生成webservice客户端3.代码编写
1.服务调用
根据xFire生成的客户端
ScheduleWebServiceClient client = new ScheduleWebServiceClient(); ScheduleWebServicePortType service = ScheduleWebServiceHttpPort();
这样,直接可以由service调用webService的接口。
2.
数据封装:
xFire 生成出来的调用webService 接口所需要的实体类都在vo 文件夹下面,在vo 类
里面,与普通的java 实体一样,都包含属性 和 该属性的set,get 方法,但是除基本数据
类型外,其他的类型都被封装成JAXBElement ,如String 类型,被封装成:
JAXBElement<String>。
如:ScheduleDataForCheckVo.java
生成一个xml 元素实例需要四个参数:
public JAXBElement (QName name, //xml 元素标记名称的 Java 绑定
Class <T > declaredType, // xml 元素声明类型的 Java 绑定
Class scope, // xml 元素声明作用域的 Java 绑定
T value) //表示 xml 元素值的 Java 实例
1.JAXBElement<String>,JAXBElement<Long>类型:
注意 new QName 时候的两个参数,对应着 vo 文件里面该属性注释中的name 和
namespace.
public class ScheduleDataForCheckVo {
@XmlElementRef (name = "cancelContent", namespace = "vo.xfire.claim.picc", type = JAXBElement.class ) protected JAXBElement<String> cancelContent;
public JAXBElement<String> getCancelContent() { return cancelContent;
} public void setCancelContent(JAXBElement<String> value) {
this .cancelContent = ((JAXBElement<String> ) value);
} }
于是,我们在给VO对象set值的时候,就应该这样写:
scheduleDataVo.setCancelContent(
New JAXBElement<String>(
new QName("vo.xfire.claim.picc","cancelContent"),
String.class,null,"要传递的值"));
2.DATE类型,在VO类中会转变成XMLGregorianCalendar 类型,这时候我们需要
将日期转化成 Calendar 类型,再转成 XMLGregorianCalendar 类型
下面是我写的一个时间转换的公共方法:
import org.apachemons.beanutils.*;
import java.util.Calendar;
import java.util.Date;
l.datatype.XMLGregorianCalendar;
import s.internal.jaxp.datatype.XMLGregorianCalendarImpl;
/**
*XMLGregorianCalendar和Calendar之间的转换器,适用于Apache pyProperties方法。
*//当需要转换为XMLGregorianCalendar类型时使用
*ister(
* new XMLGregorianCalendarConverter(),
* XMLGregorianCalendar.class);
*//当需要转换为Calendar类型时使用
*ister(new XMLGregorianCalendarConverter(),Calendar.class);
*pyProperties(destObj,srcObj);
*注意:java.util.Calendar的时区(ZONE_OFFSET)是以毫秒为单位的值。</p>
* //也可以直接传递 DATE 类型的数据进来
* vert(XMLGregorianCalendar.class,new Date())
*
*/
public class XMLGregorianCalendarConverter implements Converter {
public Object convert(Class arg0, Object arg1) {
if(arg1 instanceof XMLGregorianCalendar){
vert(arg0, (XMLGregorianCalendar)arg1);
}else{
vert(arg0, (Calendar)arg1);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论