2013-06-26 88 views
1

我的模式是:元素類型(長)沒有內容

<xsd:element name="SetMonitor"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="period" type="xsd:long" /> 
      <xsd:element name="refreshrate" type="xsd:long" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

而我將XML:

案例1.

<SetMonitor 
    xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:cb="http://schemas.cordys.com/1.0/coboc"> 
    <period/> 
    <refreshrate/> 
</SetMonitor> 

OR 病例2

<SetMonitor 
     xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:cb="http://schemas.cordys.com/1.0/coboc"> 
     <period>10</period> 
     <refreshrate>20</refreshrate> 
    </SetMonitor> 

對於情況下2沒有任何問題。但對於情況1我得到以下錯誤:

Caused by: org.xml.sax.SAXException: cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'. 
org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 14; cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'. 

我如何修改WSDL,使它同時接受情況1情況下2? 請幫忙。

回答

0

你可以做這樣的事情:

<xsd:element name="SetMonitor"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="period" type="xsd:long" nillable="true"/> 
       <xsd:element name="refreshrate" type="xsd:long" nillable="true"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 

,構建與「空」元素XML這樣

<SetMonitor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <period>2147483647</period> 
    <refreshrate xsi:nil="true" /> 
</SetMonitor> 

或者你可以使用的圖案,像這樣修改元素的類型

<xsd:element name="period"> 
    <xsd:simpleType> 
     <xsd:restriction base="xsd:string"> 
      <xsd:pattern value="|([1-9][0-9]*)" /> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:element> 

(該模式必須更精確地定義,比我用於此示例)

另一種可能性可以是定義的simpleType爲空字符串

<xsd:simpleType name="emptyString"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:length value="0"/> 
    </xsd:restriction> 
</xsd:simpleType> 

然後定義元件爲XSD的聯合:長和emptyString型

<xsd:element name="period"> 
    <xsd:simpleType> 
     <xsd:union memberTypes="xsd:long emptyString"/> 
    </xsd:simpleType> 
</xsd:element> 
+0

我試圖修改的wsdl如上所述(頂部的那個)。但是我遇到了這個新問題,像'引起:org.xml.sax.SAXException:cvc-complex-type.2.4.b:元素'cb:SetMonitor'的內容不完整。期待「{」http://schemas.cordys.com/1.0/coboc":period}'之一。 org.xml.sax.SAXParseException; lineNumber:4; columnNumber:3; cvc-complex-type.2.4.b:元素'cb:SetMonitor'的內容不完整。期望'{「http://schemas.cordys.com/1.0/coboc":period}'之一。'如果我把**期**和**刷新**的moiOccurs ='0',那麼它作品。 – Ramesh

+0

這意味着來自xml的'不會映射'。 – Ramesh

+0

'minOccurs =「0」'表示可選元素(可以省略)。 'nillable =「true」意味着它仍然需要在xml中有這個元素,但是你可以把它標記爲'xsi:nil =「true」'(類似於其他語言中的「null」) –

相關問題