2012-04-13 61 views
0

我使用Jax-WS Spring support成功地在Tomcat servlet容器上公開了合同優先的JAX-WS Web服務。雖然我遇到了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; 

    ... 
} 

當我部署web服務,但是,@XmlIDREF註釋被忽略,我結束了在命名空間的xs:anyType生成的WSDL的聲明

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

有問題的web服務的客戶報告說他們無法生成Cli (使用C#)存在此anyType。我會如何將它改回xs:idref?謝謝。

回答

0

好吧,我想我的方法有點太naiv。在做了一些研究後,我得出結論:定製生成的WSDL是不可能的。我現在切換到合同優先方法並手動指定手工製作的WSDL文件。

我讀過,任何位於META-INF/wsdl下的WSDL文件都應該由JAX-WS自動提取,如果它包含相應的服務和端口名稱。這並沒有爲我工作,所以我必須指定WSDL文件明確地使用wsdlLocation屬性上@WebService註釋

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

部署在Tomcat web服務是直截了當以下的Jax-WS community page

的說明