Pregunta

Estoy tratando de consumir algunos servicios web .NET usando JAX-WS. He generado las clases Java utilizando la herramienta wsimport. Sin embargo, cuando trato de usar estos servicios web (propietarios, no públicos) en Java, noto que la mayoría de los métodos y propiedades proporcionados por el proveedor en sus ejemplos de C # no están disponibles en las clases generadas (a pesar de no haber encontrado ningún error al generar las clases Java desde el archivo WSDL). La conexión a los servicios web también funciona básicamente.

Cuando intenté generar una clase de C # usando wsdl.exe desde el SDK de .NET, todos los métodos se generaron correctamente.

¿Cuál sería la mejor manera de consumir los servicios web .NET para que la funcionalidad completa estuviera disponible en Java, y por qué wsimport solo genera un pequeño subconjunto de todos los métodos y propiedades descritos en el archivo WSDL?

Ejemplo: en el archivo WSDL UserManagement.wsdl hay un fragmento


<s:schema elementFormDefault="qualified" targetNamespace="http://www.initechsystems.com/initech7/initechws/">
  <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>

En C #, puedo acceder al UserSecurityContext a continuación:


UserManagement userMgmt = new UserManagement();
userMgmt.UserSecurityContextValue = new SampleWS.UserRef.UserSecurityContext();
Sin embargo, en Java puedo crear el objeto UserManagement


UserManagement userMgmt = new UserManagement();

pero el objeto UserManagement generado no tiene ningún objeto accesible SecurityContext, ni getters o setters para un objeto tan privado.

Otros consejos

Me gustaría ver el ejemplo del que está hablando, ya que parece que el ejemplo envía objetos con comportamiento a través del cable en lugar de solo modelos (o mensajes, si prefiere un mejor término SOA).

Cuando envía un objeto que se formatea como un modelo de datos o mensaje, no contendrá métodos para usar. Y, con interoperabilidad, no tiene mucho sentido establecer comportamientos (métodos) para cruzar el cable.

En cuanto a lo que puede hacer, ya que está serializando, puede crear los métodos de comportamiento, si tienen sentido de su parte. Personalmente, crearía el comportamiento en otros objetos y mantendría los modelos / mensajes como contenedores de estado. Pero tu kilometraje puede variar. ;-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top