根据 xml 生成 xsd 文件
使用 idea 打开 xml 文件, 鼠标右键点击, 然后点击如下图位置生成 xsd 文件, 注意要选择 local elements/types


根据 xsd 生成带有 jaxb 注解的 javabean


jaxb 工具类
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
public class JaxbUtil {
/**
* JavaBean转换成xml
* 默认编码UTF-8
* @param obj
* @param writer
* @return
*/
public static String convertToXml(Object obj) {
return convertToXml(obj, "UTF-8");
}
/**
* JavaBean转换成xml
* @param obj
* @param encoding
* @return
*/
public static String convertToXml(Object obj, String encoding) {
String result = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* xml转换成JavaBean
* @param xml
* @param c
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T converyToJavaBean(String xml, Class<T> c) {
T t = null;
try {
JAXBContext context = JAXBContext.newInstance(c);
Unmarshaller unmarshaller = context.createUnmarshaller();
t = (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
}
测试
import com.caac.imf.api.IMFClient;
import com.caac.imf.api.IMFClientFactory;
import com.chun.test.xml.JaxbUtil;
import com.chun.test.xml.MSG;
/**
* @Author chun
* @Date 2019/7/26 10:58
*/
public class test {
public static void main(String[] args) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<MSG>" +
" <META>" +
" <SNDR>FIMS</SNDR>" +
" <RCVR></RCVR>" +
" <SEQN>1</SEQN>" +
" <DDTM>2010010223000</DDTM>" +
" <TYPE>DFOE</TYPE>" +
" <STYP>DFDE</STYP>" +
" </META>" +
" <DFLT>" +
" <FLID>657423</FLID>" +
" <FFID>3U-8898-20100103081030-A</FFID>" +
" <FLTK>W/Z</FLTK>" +
" </DFLT>" +
"</MSG>";
MSG msg = JaxbUtil.converyToJavaBean(xml, MSG.class);
System.out.println(msg.getDFLT().getFFID());
String res = JaxbUtil.convertToXml(msg);
System.out.println(res);
}
}
输出结果
3U-8898-20100103081030-A
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MSG>
<META>
<SNDR>FIMS</SNDR>
<RCVR></RCVR>
<SEQN>1</SEQN>
<DDTM>2010010223000</DDTM>
<TYPE>DFOE</TYPE>
<STYP>DFDE</STYP>
</META>
<DFLT>
<FLID>657423</FLID>
<FFID>3U-8898-20100103081030-A</FFID>
<FLTK>W/Z</FLTK>
</DFLT>
</MSG>
参考链接:
https://blog.csdn.net/qq_36874292/article/details/88687945