wsdl2java -xjc-contentForWildcard -client -autoNameResolution -encoding utf-8 -d E:\paysrc -p com.zhengmo.javaPayBussinessService http://localhost:8089/PayService.svc?wsdl
如果有命名重复的,autoNameResolution 基本能解决问题,如果xsd中有重复的,则需要自动以binding.xml了
wsdl2java -xjc-contentForWildcard -b binding.xml -client -autoNameResolution -encoding utf-8 -d E:\paysrc -p com.zhengmo.javaPayBussinessService http://localhost:8089/PayService.svc?wsdl
生成binding的代码。
SAXReader reader = new SAXReader();
File file = new File("E://xsd.xml");
Document document = reader.read(file);
Element root = document.getRootElement();
List<Element> childElements = root.selectNodes("//xs:complexType");
Map<String, Integer> map = new HashMap<>();
int count = 1;
for (Element el : childElements) {
count++;
String name = el.attributeValue("name");
List<Element> fields = el.selectNodes("xs:sequence/xs:element");
for (Element field : fields) {
String fname = name + "_" + field.attributeValue("name");
if (map.containsKey(fname.toUpperCase())) {
int i = map.get(fname.toUpperCase());
map.put(fname, i + 1);
fname += i + 1;
} else {
map.put(fname.toUpperCase(), 1);
}
System.out.println(" <jaxb:bindings node=\"//xsd:complexType[@name='" + name + "']/xsd:sequence/xsd:element[@name='" + field.attributeValue("name") + "']\">");
System.out.println(" <jaxb:factoryMethod name=\"" + fname + "\"/>");
System.out.println(" <jaxb:property name=\"" + fname + "\"/>");
System.out.println(" <jaxb:class name=\"" + fname + count + "\"/>");
System.out.println(" </jaxb:bindings>");
}
}
浙公网安备 33010602011771号