xsw69139 2017-12-08 01:56 采纳率: 100%
浏览 2535
已采纳

java 解析WSDL 对应参数type解析不出来,为什么?可能是什么原因?

对应jar包图片说明
效果图:
图片说明

主要代码:
package wsclient.test;

import java.util.Iterator;
import java.util.List;

import wsclient.domain.OperationInfo;
import wsclient.domain.ParameterInfo;
import wsclient.domain.ServiceInfo;
import wsclient.util.ComponentBuilder;

public class WSClient {

public static void testWSDL4J() {
    int i = 0, j = 0;
    try {
        ComponentBuilder builder = new ComponentBuilder();
        ServiceInfo serviceInfo = new ServiceInfo();
        String wsdllocation = "https://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl";
        serviceInfo.setWsdllocation(wsdllocation);
        serviceInfo = builder.buildserviceinformation(serviceInfo);
        Iterator<?> iter = serviceInfo.getOperations();
        System.out.println("现在可以查看远端Web服务对象的有关情况了(对应本地Web服务类,ServiceInfo)");
        System.out.println(serviceInfo.getName() + "提供的操作有:");

        while (iter.hasNext()) {
            i++;
            OperationInfo oper = (OperationInfo) iter.next();
            System.out.println("");
            System.out.println("操作:" + i + " " + oper.getTargetMethodName());
            List<?> inps = oper.getInparameters();
            List<?> outps = oper.getOutparameters();
            if (inps.size() == 0) {
                System.out.println("此操作所需的输入参数为:");
                System.out.println("执行此操作不需要输入任何参数!");
            } else {
                System.out.println("此操作所需的输入参数为:");
                for (Iterator<?> iterator1 = inps.iterator(); iterator1.hasNext();) {
                    ParameterInfo element = (ParameterInfo) iterator1.next();
                    System.out.println("参数名为:" + element.getName());
                    System.out.println("参数类型为:" + element.getKind());
                }
            }
            if (outps.size() == 0) {
                System.out.println("执行此操作不返回任何参数!");
            } else {
                System.out.println("此操作的输出参数为:");
                for (Iterator<?> iterator2 = outps.iterator(); iterator2.hasNext();) {
                    ParameterInfo element = (ParameterInfo) iterator2.next();
                    System.out.println("参数名:" + element.getName());
                    System.out.println("类型为:" + element.getKind());
                }
            }
            System.out.println("");
        }
    }

    catch (Exception e) {
        System.err.println(e.getMessage());
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    WSClient.testWSDL4J();
}

}

public ServiceInfo buildserviceinformation(ServiceInfo serviceinfo)
throws Exception {
WSDLReader reader = wsdlFactory.newWSDLReader();
reader.setFeature("javax.wsdl.verbose", true);
reader.setFeature("javax.wsdl.importDocuments", true);
// reader.setExtensionRegistry(new MyExtensionRegistry());
Definition def = reader.readWSDL(serviceinfo.getWsdllocation());
System.out.println("***恭喜您!def已经成功构建***");
wsdlTypes = createSchemaFromTypes(def);
// System.out.println("==========================="+def.toString());
System.out.println("WSDL的Schema已经成功构建完,总共有多少个Schema定义:"
+ wsdlTypes.size());
Map services = def.getServices();
if (services != null) {
// System.out.println("======================"+services);
Iterator svcIter = services.values().iterator();
populateComponent(serviceinfo, (Service) svcIter.next());
System.out.println("***恭喜您!系统的Web服务对象:ServiceInfo已经成功构建***");
System.out.println("");
}
return serviceinfo;
}

  • 写回答

2条回答 默认 最新

  • 小丶卿 2017-12-08 02:13
    关注

    起码给看看wsdl,和部分实现

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)