在Java(metro)中使用.NET Web服务-XMLNode/XMLDocument使用?
我对Java有点生疏,这是我第一次使用metro/JAX-WS,所以如果这是一个愚蠢的问题,我道歉 我必须编写一个使用.NET Web服务的客户端。我已经记下了基础知识;我已经从WSDL生成了包装器,我可以创建我的对象和端口,进行调用并获得响应在Java(metro)中使用.NET Web服务-XMLNode/XMLDocument使用?,java,.net,xml,jax-ws,java-metro-framework,Java,.net,Xml,Jax Ws,Java Metro Framework,我对Java有点生疏,这是我第一次使用metro/JAX-WS,所以如果这是一个愚蠢的问题,我道歉 我必须编写一个使用.NET Web服务的客户端。我已经记下了基础知识;我已经从WSDL生成了包装器,我可以创建我的对象和端口,进行调用并获得响应 Widgets d = new Widgets(); WidgetsSoap dp = d.getWidgetsSoap(); ((BindingProvider)dp).getRequestContext(). put(java
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服务返回的信息。我在周末找到了解决方案,但我不确定这是正确的解决方案:
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));
}
UserGetDeviceResponse.UserGetDevicesResult j=dp.userGetDevices();
列表n=j.getContent();
如果(n.size()>0)
{
节点z=(节点)n.get(0);
System.out.println(nodeToString(z));
}
这给了我XML文档响应,这正是我想要的。然后,我可以在树上执行我想要的任何操作来提取我要查找的数据。您确定Java端有XmlNode和XmlDocument吗?这些似乎是C#术语。这句话看起来很愚蠢,但是有很多XML解析器,它们的行为都不同:)好吧,XmlNode/XmlDocument与Java的文档和节点对象有直接的等价物。从WS返回XmlNode/XmlDocuments是MS建议的返回复杂数据的方法。这似乎在WSDL中被正确地理解为“任意”数据,我只是不确定如何从Java端获取它。如果您可以获得LogicalMessageContext,那么您就可以开始工作了。也许dp.getRequestContext()会返回一个。无法进一步帮助您,如果有的话,因为我通常不生成绑定,而是直接处理XML。