在camel cxf webservice的响应中创建自定义SoapFault错误消息

时间:2015-05-06 08:47:32

标签: web-services soap apache-camel cxf

我正在开发基于camel的cxf-webservice。我必须在我的响应中显示所有类型的错误消息,我在服务层中正确地执行此操作。但是如果请求无效,我仍然得到了正确的答复。

对于以下类型的请求

<soapenv:Body>
    ...
    <!--Optional:-->
    <prod:CandidateMaximumQuantity/>
    <!--Optional:-->
    <prod:CandidatePerPageMaximumQuantity>100</prod:CandidatePerPageMaximumQuantity>
    <!--Optional:-->
    <prod:CandidateDisplayStartSequenceNumber>1</prod:CandidateDisplayStartSequenceNumber>
    ...
</soapenv:Body>

在soap验证器中,我得到无效的十进制值。预计至少有一位数。 在我的cxf-context中编写以下代码后,我能够进行输入请求验证。

但是在回复中我

<cxf:properties>
<entry key="allowStreaming" value="false" />
<entry key="schema-validation-enabled"     value="${isSchemaValidationEnabled}" />
</cxf:properties>

其中isSchemaValidationEnabled = true。

所以我在SOAP UI中得到以下响应。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <soap:Fault>
     <faultcode>soap:Client</faultcode>
     <faultstring>Unmarshalling Error: cvc-datatype-valid.1.2.1: '' is    not a valid value for 'integer'.</faultstring>
   </soap:Fault>
 </soap:Body>

我的要求是创建自定义错误消息,以便我可以将SOAP错误传播到我的响应中。我可以显示以下消息的格式

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

   <soapenv:Body>
      <prod:Response ServiceVersionNumber=" " xmlns:prod="****">
         <prod:TransactionDetail>
        <prod:ApplicationTransactionID>***Request</prod:ApplicationTransactionID>
        <prod:ServiceTransactionID/>
        <prod:TransactionTimestamp>2015-05-05T05:33:52</prod:TransactionTimestamp>
     </prod:TransactionDetail>
     <prod:TransactionResult>
        <prod:SeverityText>Error</prod:SeverityText>
        <prod:ResultID>CM018</prod:ResultID>
        <prod:ResultText>No candidates resulted for the given input criteria.</prod:ResultText>
        <prod:ResultMessage>
           <prod:ResultDescription>List of service interface is not available for the given Service name or Service Version  number</prod:ResultDescription>
        </prod:ResultMessage>
     </prod:TransactionResult>
  </prod:Response>

请有人回复查询。

0 个答案:

没有答案