Spring boot中使用WebService
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.7.18</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.7.18</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.10</version>
</dependency>
调用WebService
public static Properties setting = PropertyUtil.getConfig("setting.properties");
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(PropertyUtil.getPropValue( setting , "setting.hisWebserviceJkkAddress" ));
HTTPConduit conduit = (HTTPConduit)client.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(10000);
policy.setAllowChunking(false);
policy.setReceiveTimeout(10000);
conduit.setClient(policy);
QName operateQName= new QName(PropertyUtil.getPropValue( setting , "setting.jkk_namespace_url" ),PropertyUtil.getPropValue( setting , "setting.trans_code_jkk_query" ));
Object[] invokeResult = new Object[0];
try {
invokeResult = client.invoke(operateQName, inXml);
} catch (Exception e) {
log.error("调用健康卡平台出错{}",e.getMessage());
}
String outXml=invokeResult[0].toString();
XML转对象工具类
注意:如果转换失败可以参考此链接文章
public class XsteamUtil {
public static Object toBean(Class<?> clazz, String xml) {
Object xmlObject = null;
XStream xstream = new XStream();
xstream.setClassLoader(JKKResult.class.getClassLoader());
XStream.setupDefaultSecurity(xstream);
xstream.allowTypes(new Class[]{JKKResult.class, PatientOutxml.class, PatientOutXml.class, BaseInxml.class, PatrentInData.class});
xstream.processAnnotations(clazz);
xstream.autodetectAnnotations(true);
xmlObject = xstream.fromXML(xml);
return xmlObject;
}
}
对象转XML工具类
使用泛型类转换报错去看另一篇笔记
@Slf4j
public class XMLUtil {
public static String convertToXml(Object obj) {
StringWriter sw = new StringWriter();
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(obj, sw);
}catch (MarshalException e1){
log.error("error1:{}",e1.getMessage());
e1.printStackTrace();
} catch (JAXBException e) {
log.error("error:{}",e.getMessage());
e.printStackTrace();
}
return sw.toString();
}
}
实体中所需的改变
类上的注解
@XmlAccessorType(XmlAccessType.FIELD)
@XStreamAlias("data")
方法上的注解:
@XmlElement(name = "hosCardNo")
转换集合:
@XStreamImplicit(itemFieldName = "deptInfo")
private List<Departments> departments;