在Java中消费.NET Web服务的最佳方法

4
我正在尝试使用JAX-WS消费一些.NET Web服务。 我使用wsimport工具生成了Java类。 然而,当我尝试在Java中使用这些(专有的,非公共的)Web服务时,我注意到供应商在他们的C#示例中提供的大多数方法和属性在生成的类中不可用(尽管从WSDL文件生成Java类时没有遇到任何错误)。 连接到Web服务也基本上可以工作。
当我尝试使用.NET SDK中的wsdl.exe生成C#类时,所有方法都可以正确生成。
那么,消费.NET Web服务的最佳方式是什么,以便Java中可用完整功能,并且为什么wsimport只生成WSDL文件中描述的一小部分方法和属性?

Example: in the WSDL file UserManagement.wsdl there is a snippet


<s:schema elementFormDefault="qualified" targetNamespace="<a rel="nofollow noreferrer" href="http://www.initechsystems.com/initech7/initechws/">http://www.initechsystems.com/initech7/initechws/</a>">
  <s:element name="UserSecurityContext" type="s2:UserSecurityContext"/>
  <s:complexType name="UserSecurityContext">
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="Token" type="s2:UserToken"/>
    </s:sequence>
  </s:complexType>
  <s:complexType name="UserToken">
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="Value" type="s:string"/>
    </s:sequence>
  </s:complexType>
</s:schema>

在C#中,我可以这样访问UserSecurityContext:


UserManagement userMgmt = new UserManagement();
userMgmt.UserSecurityContextValue = new SampleWS.UserRef.UserSecurityContext();
However, in Java I can create the UserManagement object


UserManagement userMgmt = new UserManagement();

但是生成的UserManagement对象没有任何可访问的SecurityContext对象,也没有用于私有对象的getter或setter。


你是说 C# 代码(以“UserManagement userMgmt = new UserManagement();”开头的片段)正在使用 wsdl.exe 生成的 UserManagement 对象吗?如果是这样,那么这段代码实际上是做什么的?我认为 wsimport 只是为 wsdl 的方法调用生成输入和输出参数的类。C# 生成器是否做了更多的工作?希望对你有所帮助 - David F - davidfrancis
2个回答


1

我想看看你所说的例子,因为听起来这个例子发送了带有行为的对象而不仅仅是模型(或消息,如果您更喜欢更好的SOA术语)。

当您发送格式化为数据模型或消息的对象时,它将不包含可用的方法。并且,在互操作性方面,设置要通过网络传输的行为(方法)并没有太多意义。

至于您可以做什么,由于您正在序列化,如果它们在您这一侧有意义,您可以创建行为方法。就个人而言,我会在其他对象中创建行为并将模型/消息保留为状态容器。但是,您的情况可能有所不同。;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接