【问题标题】:Best way to consume .NET web services in Java在 Java 中使用 .NET Web 服务的最佳方式
【发布时间】:2010-10-12 17:38:41
【问题描述】:

我正在尝试使用 JAX-WS 使用一些 .NET Web 服务。我已经使用 wsimport 工具生成了 Java 类。但是,当我尝试在 Java 中使用这些(专有的,非公共的)Web 服务时,我注意到供应商在其 C# 示例中提供的大多数方法和属性在生成的类中不可用(尽管没有遇到任何错误从 WSDL 文件生成 Java 类时)。连接到网络服务也基本正常。

当我尝试使用 .NET SDK 中的 wsdl.exe 生成 C# 类时,所有方法均已正确生成。

使用 .NET Web 服务以在 Java 中提供全部功能的最佳方式是什么?为什么 wsimport 只生成 WSDL 文件中描述的所有方法和属性的一小部分?

示例:在 WSDL 文件 UserManagement.wsdl 中有一个 sn -p


<s:schema elementFormDefault="qualified" targetNamespace="@987654321@">
  <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();
但是,在 Java 中,我可以创建 UserManagement 对象


UserManagement userMgmt = new UserManagement();

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

【问题讨论】:

  • 你是说 C# 代码(sn-p 开始“UserManagement userMgmt = new UserManagement();”)正在使用 wsdl.exe 生成的 UserManagement 对象吗?如果是这样,代码 sn-p 实际上是做什么的?我相信 wsimport 只是为您的 wsdl 的方法调用生成输入和输出参数的类。 C# 生成器的功能还不止这些吗? HTH - 大卫 F

标签: java .net web-services jax-ws interop


【解决方案1】:
【解决方案2】:

我想看看您正在谈论的示例,因为听起来该示例通过网络发送具有行为的对象,而不仅仅是模型(或消息,如果您希望使用更好的 SOA 术语)。

当您发送格式化为数据模型或消息的对象时,它不会包含要使用的方法。而且,对于互操作,设置行为(方法)以跨越网络并没有多大意义。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多