【问题标题】:Consuming .NET webservice in Java (metro) - XMLNode/XMLDocument consumption?在 Java (metro) 中消费 .NET webservice - XMLNode/XMLDocument 消费?
【发布时间】:2009-03-07 00:03:23
【问题描述】:

我的 Java 有点生疏,这是我第一次使用 Metro/JAX-WS,所以如果这是一个愚蠢的问题,我深表歉意。

我必须编写一个使用 .NET Web 服务的客户端。我已经掌握了基础知识;我已经从 WSDL 生成了包装器,我可以创建我的对象和端口并进行调用并获得响应。

    Widgets d = new Widgets();
    WidgetsSoap dp = d.getWidgetsSoap();
    ((BindingProvider)dp).getRequestContext(). put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://actualsite/foo.asmx");

    UserGetWidgetsResponse.UserGetWidgetsResult j = dp.userGetWidgets();

webservice 的返回值几乎都是 XmlDocument 或 XmlNode。如何从 wsimport 生成的“UserGetWidgetsResponse.UserGetWidgetsResult”到调用返回的实际 XML?

我有很多这样的服务和一堆方法,所以我希望找到一个不需要以任何方式修改生成的包装器的解决方案。我也无法控制 Web 服务返回的信息。

【问题讨论】:

  • 你确定你在 Java 端获得了 XmlNode 和 XmlDocument 吗?这些似乎是 C# 术语。这句话可能看起来很愚蠢,但是周围有很多 XML 解析器,它们的行为都不同:)
  • 嗯,XmlNode/XmlDocument 直接等效于 Java 的 Document 和 Node 对象。从 WS 返回 XmlNode/XmlDocuments 是 MS 建议的返回复杂数据的方法。这似乎在 WSDL 中正确地作为“任何”数据出现,我只是不确定如何在 Java 端获取它。
  • 在我看来,您需要从某个地方获取 LocalMessage 的有效负载。如果你能得到 LogicalMessageContext 你在做生意。也许 dp.getRequestContext() 返回一个。无法进一步帮助您,如果有的话,因为我通常不生成绑定而是直接处理 XML。

标签: java .net xml jax-ws java-metro-framework


【解决方案1】:

我在周末找到了一个解决方案,但我不确定它是否是正确的解决方案:

    UserGetDevicesResponse.UserGetDevicesResult j = dp.userGetDevices();
    List<Object> n = j.getContent();
    if (n.size() > 0)
    {
        Node z = (Node)n.get(0);
        System.out.println(nodeToString(z));
    }

这给了我想要的 XML 文档响应。然后我可以在树上执行任何我想要的操作来提取我正在寻找的数据。

【讨论】:

    猜你喜欢
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多