2016-08-10 69 views
0

我正在爲SOAP Webservices使用CXF。是否有任何情況下產生的SOAP響應不符合WSDL?我讓CXF通過wsdl2java從WSDL生成代碼。CXF可以生成不符合WSDL的SOAP響應嗎?

例如我有一些實體minOccurs=1。 CXF會強制相應的Java元素不會爲空嗎?

其他差異可能嗎?

舉個例子:我有以下WSDL類型:

 <xsd:complexType name="PropertyList"> 
     <xsd:sequence> 
      <xsd:element maxOccurs="unbounded" minOccurs="1" name="property" 
         type="pms-xsd:Property" /> 
     </xsd:sequence> 
    </xsd:complexType> 

它被翻譯成:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "PropertyList", propOrder = { 
    "property" 
}) 
public class PropertyList { 

    @XmlElement(required = true) 
    protected List<Property> property; 
... 

這,我的理解,要求對清單property存在(形式的XmlElement),但不是至少存在一個屬性,WSDL需要該屬性。這是一個可能的問題,還是我理解錯誤?

回答

0

要強制執行架構,您需要啓用架構驗證。請檢查here以啓用架構驗證。示例代碼片段如下所示。

<jaxws:endpoint name="{http://apache.org/hello_world_soap_http}SoapPort" 
    wsdlLocation="wsdl/hello_world.wsdl" 
    createdFromAPI="true"> 
    <jaxws:properties> 
     <entry key="schema-validation-enabled" value="true" /> 
    </jaxws:properties> 
</jaxws:endpoint> 

注:爲了工作,你需要正確設置WSDL位置。這樣在模式驗證期間就可以引用WSDL文件。

+0

這隻涉及模式驗證,它會根據提供的wsdl測試響應。我更多地討論生成的SOAP響應甚至可能無法驗證的問題,並且如果編程過程已經通過例如minOccurs屬性來確保該響應。 – Arne

+0

即使在JAXB中編組/解組時,我們也提供了將應用模式驗證的xsd文件,但沒有JAXB特定的驗證批註。在編組架構驗證之前的CXF中將在其中一個階段中應用。並且在解組階段之後的一個階段中應用消息模式驗證。在模式驗證過程中,如果失敗,它會拋出錯誤。 –