Rench'

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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>");
            }
        }

  

posted on 2016-05-10 19:43  舞飞林  阅读(404)  评论(0)    收藏  举报