我的入参实例
<MESSAGE>
<BODY>
<ROWS>
<ROW>
<REG_NO>123</REG_NO>
</ROW>
</ROWS>
</BODY>
</MESSAGE>
pom文件
<!--xstream相关依赖-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.9</version>
</dependency>
<!--Jsoup相关依赖-->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.3</version>
</dependency>
实体类
package webservice.util.entity;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
import lombok.experimental.Accessors;
@XStreamAlias("ROW")
@Data
@Accessors(chain = true)
public class Check {
@XStreamAlias("REG_NO")
protected String regNo;
}
工具类
1. WebServiceUtil工具类
package webservice.util;
import webservice.util.entity.WebService;
public class WebServiceUtil {
private final static String prefixRequestXml = "<MESSAGE><BODY><ROWS>";
private final static String suffixRequestXml = "</ROWS></BODY></MESSAGE>";
private final static WebService webService = new WebService();
public static <T> T getWebServiceResult(Object obj, Class<T> clas, String param) {
String middleRequestXml = XMLUtil.toXml(obj);
String xml = prefixRequestXml + middleRequestXml + suffixRequestXml;
String result = webService.getWebServicePort().service(param, xml);
T response = JaxbXmlUtil.convertToJavaBean(result, clas);
return response;
}
}
注意:
其中的webservice是由idea根据wsdl文件自动生成的类
以及其调用的.service方法的接口也会一同生成。
2. XMLUtil工具类
package webservice.util;
import org.apache.commons.lang.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.parser.Parser;
import org.jsoup.parser.XmlTreeBuilder;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XMLUtil {
public static <T> T parseFromXml(Class<T> clazz, String xml) {
XStream xStream = new XStream(new DomDriver());
xStream.processAnnotations(clazz);
@SuppressWarnings("unchecked")
T t = (T) xStream.fromXML(xml);
return t;
}
public static String toXml(Object obj) {
XStream xStream = new XStream(new DomDriver());
xStream.processAnnotations(obj.getClass());
return xStream.toXML(obj).replaceAll("\\_+", "_");
}
public static String getElementString(String xml, String elementId) {
if (StringUtils.isBlank(xml) || StringUtils.isBlank(elementId)) {
return null;
}
Document document = Jsoup.parse(xml, "", new Parser(new XmlTreeBuilder()));
return document.select(elementId).toString().replaceAll("\\s*", "");
}
public static <T> T parseElementObj(String xml, String elementId, Class<T> clazz) {
if (StringUtils.isBlank(xml) || StringUtils.isBlank(elementId)) {
return null;
}
return parseFromXml(clazz, getElementString(xml, elementId));
}
}
3. JaxbXmlUtil工具类
package webservice.util;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class JaxbXmlUtil {
public static final String DEFAULT_ENCODING = "UTF-8";
public JaxbXmlUtil() {
}
public static String convertToXml(Object obj) {
return convertToXml(obj, "UTF-8");
}
public static String convertToXml(Object obj, String encoding) {
String result = null;
JAXBContext context = null;
try {
context = JAXBContext.newInstance(new Class[]{obj.getClass()});
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty("jaxb.formatted.output", false);
marshaller.setProperty("jaxb.encoding", encoding);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (JAXBException var6) {
var6.printStackTrace();
}
return result;
}
public static String convertToXmlByCustomHeader(Object obj) {
return convertToXmlByCustomHeader(obj, "UTF-8");
}
public static String convertToXmlByCustomHeader(Object obj, String encoding) {
String result = null;
JAXBContext context = null;
try {
context = JAXBContext.newInstance(new Class[]{obj.getClass()});
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty("jaxb.formatted.output", false);
marshaller.setProperty("jaxb.encoding", encoding);
marshaller.setProperty("jaxb.fragment", true);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (JAXBException var6) {
var6.printStackTrace();
}
return result;
}
public static <T> T convertToJavaBean(String xml, Class<T> t) {
T obj = null;
JAXBContext context = null;
try {
context = JAXBContext.newInstance(new Class[]{t});
Unmarshaller unmarshaller = context.createUnmarshaller();
obj = unmarshaller.unmarshal(new StringReader(xml));
} catch (JAXBException var5) {
var5.printStackTrace();
}
return obj;
}
}
使用WebserviceUtil工具类
Check examine = new Check().setRegNo(reg_no);
List<CheckRow> rows = WebServiceUtil.getWebServiceResult(examine, CheckMessage.class, "app=123,password=123456").getBODY().getROWS().getROW();
注意:
其中 CheckMessage 和 CheckRow 类由idea根据.xsd文件自动生成,
其中的param自行替换成自己所需的参数。