WSImport создает конфликтующие XMLTypes для нескольких WSDL Dynamics CRM 4.0

В настоящее время я работаю с веб-службой Dynamics CRM 4.0. Первое, что я сделал, это сгенерировал правильные классы с помощью wsimport для Java/JAX-WSна основе WSDL веб-сервиса. При создании классов я получил несколько ошибок:

[ERROR] A class/interface with the same name
"com.microsoft.schemas.crm._2007.webservices.RetrieveResponse" is already in use. Use a class customization to resolve this conflict.
  line 979 of file://src/main/webapp/WEB-INF/classes/META-INF/wsdl/CrmServiceWsdl.wsdl

[ERROR] (Relevant to above error) another "RetrieveResponse" is generated from here.
  line 12274 of file://src/main/webapp/WEB-INF/classes/META-INF/wsdl/CrmServiceWsdl.wsdl

Строка 979 сообщает нам:


    
      
        
      
    
  

А строка 12274 дает нам:


    
      
        
          
        
      
    
  

Обе части находятся в одном и том же пространстве имен. Оба будут сгенерированы как RetrieveResponse.class, поэтому они конфликтуют.Я нашел решение этой проблемы, которое представляет собой XML-файл привязки JAX-B:


  

Это работает (не уверен, что это правильный подход..?)..

Итак, после этого мне удалось создать несколько успешных вызовов веб-службы, и это здорово!

Теперь возникает проблема: некоторые бизнес-объекты в crm динамики используют класс Picklist. Объекты этого типа можно запросить с помощью службы метаданных: http://msdn.microsoft.com/en-us/library/bb890248.aspx

Следующее, что я сделал, — снова сгенерировал классы. для службы метаданных на основе WSDL. Результат сгенерированных классов не такой, как мы, за исключением. Например, он создает класс «com.microsoft.schemas.crm._2007.webservices.ExecuteResponse». Но этот класс также существует в точно таком же пакете классов, сгенерированных CrmService. Различия между ними следующие:

Metadataservice ExecuteReponse:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "response"
})
@XmlRootElement(name = "ExecuteResponse")
public class ExecuteResponse {

   @XmlElement(name = "Response")
   protected MetadataServiceResponse response;
etc...

CrmService ExecuteReponse:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "response"
})
@XmlRootElement(name = "ExecuteResponse")
public class ExecuteResponse {

   @XmlElement(name = "Response", required = true)
   protected ResponseType response;
etc...

Теперь этот класс — всего лишь один пример (другой пример — CrmAuthenticationToken), который почти] точная копия другого класса. Чтобы иметь возможность использовать одни и те же классы, я добавил суффикс пакета к классам CrmService (отображается как префикс .). Итак, теперь, когда я пытаюсь вызвать CrmService, я получаю следующее исключение:

Two classes have the same XML type name "{http://schemas.microsoft.com/crm/2007/CoreTypes}CrmAuthenticationToken". Use @XmlType.name and @XmlType.namespace to assign different names to them.
this problem is related to the following location:
    at com.microsoft.schemas.crm._2007.coretypes.CrmAuthenticationToken
    at public com.microsoft.schemas.crm._2007.coretypes.CrmAuthenticationToken *prefix*.com.microsoft.schemas.crm._2007.coretypes.ObjectFactory.createCrmAuthenticationToken()
    at *prefix*.com.microsoft.schemas.crm._2007.coretypes.ObjectFactory
this problem is related to the following location:
    at *prefix*.com.microsoft.schemas.crm._2007.coretypes.CrmAuthenticationToken
    at public javax.xml.bind.JAXBElement *prefix*.com.microsoft.schemas.crm._2007.webservices.ObjectFactory.createCrmAuthenticationToken(*prefix*.com.microsoft.schemas.crm._2007.coretypes.CrmAuthenticationToken)
    at *prefix*.com.microsoft.schemas.crm._2007.webservices.ObjectFactory

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

Это Microsoft, ошибка WSimport или просто глупая ошибка с моей стороны? Надеюсь, кто-нибудь поможет мне с этой проблемой!

Спасибо за внимание!

9
задан Paulius Matulionis 19 October 2012 в 16:01
поделиться