2012-04-13 1 views
0

Я успешно просматриваю контрактную веб-службу JAX-WS по контракту в контейнере сервлетов Tomcat с Jax-WS Spring support. Тем не менее, у меня есть troulbes с типами xs:idref. Исходный файл XSD содержит сложный типКак изменить привязку Jax-WS WSDL @IDREF

<xs:complexType name="DocumentScopeOptionalTypeReferenceIdentifier"> 
    <xs:simpleContent> 
     <xs:extension base="DocumentScopeReferenceIdentifierContent"> 
     ... 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
    <xs:simpleType name="DocumentScopeReferenceIdentifierContent"> 
    <xs:restriction base="xs:IDREF"> 
     <xs:minLength value="1"/> 
     <xs:maxLength value="64"/> 
    </xs:restriction> 
    </xs:simpleType> 

который XJC правильно компилирует в

public class DocumentScopeOptionalTypeReferenceIdentifier { 

    @XmlValue 
    @XmlIDREF 
    protected Object value; 

    ... 
} 

Когда я развернуть WebService, однако, @XmlIDREF аннотацию игнорируется, и я в конечном итоге с xs:anyType в пространстве имен декларирование полученного WSDL

<xs:complexType name="DocumentScopeOptionalRoleReferenceIdentifier"> 
<xs:simpleContent> 
<xs:extension base="xs:anyType"> 
... 
</xs:extension> 
</xs:simpleContent> 
</xs:complexType> 

Клиенты WebService в докладе вопрос, что они не могут генерировать Cli (используя C#) с этим anyType. Как я могу изменить это на xs:idref? Благодарю.

ответ

0

Хорошо, я думаю, что мой подход был слишком наивным. Проведя немного исследований, я пришел к выводу, что настройка сгенерированного WSDL невозможна. Теперь я переключился на первый подход к контракту и вручную задал файл WSDL вручную.

Я прочитал, что любой файл WSDL, расположенный под META-INF/wsdl, должен автоматически подбираться JAX-WS, если он содержит соответствующую службу и имя порта. Это не работает для меня, поэтому я должен был указать файл WSDL явно с помощью атрибута wsdlLocation на @WebService аннотацию

@WebService(
    targetNamespace = "...", 
    serviceName = "...", 
    portName = "...", 
    wsdlLocation = "/META-INF/wsdl/mywebservice.wsdl" 
) 
public class MyWebService { ... } 

Развертывания веб-сервис на сервере Tomcat был прямо вперед, следуя инструкции на Jax-WS community page