Как генерировать бизнес-POJO на стороне Java / JAXB / CXF при использовании веб-службы MS / .NET / .asmx? - PullRequest
1 голос
/ 25 августа 2011

У нас есть несколько веб-сервисов на базе MS, которые в интрасети видны как ссылки .asmx? WSDL.Нет проблем, когда эти веб-сервисы используются с последней версией Visual Studio.Все бизнес-объекты имеют смысл.Я подозреваю, что Microsoft использует какое-то секретное рукопожатие при использовании ServiceReference и полагается на некоторые собственные знания о том, какой фактический тип CSharp находится за элементом, типизированным как <s:schema>

Но нашему отделу необходимо использовать все, что связано с Java.Мой выбор - CXF (v.2.4.2), и он хорошо работает с Eclipse, SOAP-UI, Tomcat.И есть проблемы с совместимостью.Во-первых, каждый wsdl должен быть изменен вручную.Все <s:schema> <s:any> are replaced with single <s:any>.После этого CXF может завершить создание клиентской Java.Но объекты Java не являются бизнес-объектами POJO.Это некие DOM-элементы, например

<code>/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;any/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * 
* * * / @XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "", propOrder = {"any"}) открытый статический класс GetDepartmentsResult {@XmlAnyElement (lax = true) защищенный объект any;/ ** * Получает значение свойства any.* * @return * возможным объектом является * {@link Object} * * / public Object getAny () {return any;} / ** * Устанавливает значение свойства any.* * @param value * допустимым объектом является * {@link Object} * * / public void setAny (Object value) {this.any = value;}}

Когда код тестируется во время выполнения, все работает нормально.Но каждый объект должен рассматриваться как элемент DOM.Я уверен, что где-то допустил ошибку, удалив <s:schema> или когда использовал wsld2java, поэтому он потерял семантику.Но что мне делать именно в CXF, чтобы классы Java выглядели так же чисто, как классы CSharp?

Спасибо.

Редактировать: получил некоторые подсказки по http://msdn.microsoft.com/en-us/magazine/cc188755.aspx, яНадеюсь, эта ссылка будет действительна в более позднее время, когда кто-то ищет тот же ответ.Другой способ найти статью:

Журнал MSDN> Выпуски> 2003> Апрель> Файлы XML: веб-службы и наборы данных

1 Ответ

0 голосов
/ 26 августа 2011

Ответ: невозможно.

После исчерпывающего исследования становится очевидным, что бизнес-POJO невозможно восстановить на клиенте, когда на стороне службы нет объектов Business CSharp. Это просто.

В моей конкретной ситуации:

  • CXF 2.4.2, использующий wsdl2java ASMX ASP.NET, выдаст ошибку s: schema: FAIL
  • SOAPUI с CXF 2.4.2 не будет выполнен по той же причине
  • Oracle Sun Metro Glassfish 3.1, использующий ASMX ASP.NET, требующий локальной копии схем: PASS (но требующий локальной копии WSDL, но без бизнес-объектов)

В будущем лучший сценарий:

  • Oracle Sun WSIT Tango использует службу Microsoft WCF с дополнительным «секретным рукопожатием» для предоставления некоторой метаинформации как во время потребления, так и во время выполнения.
...