2010-10-08 18 views
1

我正在使用Enunciate爲Wicket Web應用程序生成SOAP端點我正在處理,並且我有幾個問題我沒有弄清楚尚未解決。JAX-WS和Enunciate - 如何更改Enunciate的默認XSD命名約定

1如何更改xsd文件的名稱?我已經通過了FAQ看,它告訴我做一些與此類似:

 
<xml> 
    <schema namespace="http://api.example.com/data" file="data.xsd"/> 
</xml> 

不過,我還沒有完全想通了如何設置爲我的數據對象的targetNamespace。我已經通過@WebService(targetNamespace =「blah」)完成了我的服務,但是如何註釋我的數據對象以讓Enunciate知道它應該屬於哪個名稱空間?

2聲明生成我的XSD很好,但我不特別喜歡它使用的元素名稱。我有一個ServiceRequest和ServiceResponse對象。 ServiceRequest對象具有用戶對象列表。 ServiceResponse有一個Group對象列表。闡明表明,ServiceRequest中的每個「用戶」對象都應該使用標籤「<用戶>」。我覺得使用單數形式「<user>」更有意義,因爲標籤實際上只包含一個用戶。有沒有可能改變這種行爲,如果是這樣,怎麼樣?

在此先感謝。

回答

2

所以要清楚的是,除了命名模式文件的問題之外,您的問題實際上更多的是關於JAXB而不是關於Enunciate。 JAXB是一個規範,它定義了Java對象如何(去)序列化到XML和來自XML的聲明並符合該規範。

無論如何,將命名空間應用於Java對象的最簡單方法是在Java類的包中包含package-info.java文件。用@XmlSchema註釋你的包,並將命名空間設置爲你想要的值。

自定義訪問器的序列化到/從XML可以與@XmlElement註解來完成,例如:

public class MyClass { 
    ... 
    @XmlElement (name="user") 
    List<User> users; 
    ... 
} 

下面是JAXB的javadoc

https://jaxb.dev.java.net/nonav/2.1.9/docs/api/

或谷歌的很好的JAXB教程。

+0

謝謝瑞恩。我設法通過使用@XmlElementWrapper和@XmlElement等註釋來實現正確的結構:-) – John 2010-10-14 14:56:24

相關問題