首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从XMLAdapter返回SOAPFault?

如何从XMLAdapter返回SOAPFault?
EN

Stack Overflow用户
提问于 2013-02-06 16:51:09
回答 1查看 322关注 0票数 1

我正在开发一个基于SOAP的WebService (JAX-WS),日期带有特定的格式"yyyymmdd“。我的WSDL将日期定义为字符串,但是当预期的格式后面没有元素值时,我想返回一个SOAP错误响应。我已经为元素定义了一个XMLAdapter,并在解组方法中尝试了以下方法:

代码语言:javascript
复制
public XMLGregorianCalendar unmarshal(String value) throws Exception {
    if (!checkCorrectFormat(value)){
        throw new RuntimeException();
    }

    return ParseHelper.getInstance().parseStrDateToXMLDate(value);
}

但是异常丢失了,WebService继续运行,没有问题地为未编组的元素获取了一个空的XMLGregorianCalendar值。也许这不是实现此格式控件的合适位置……任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-07 03:01:22

考虑在您的xsd中实现这个正则表达式限制:

代码语言:javascript
复制
  <xsd:simpleType name="MySpecialDate">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="\d{4}\d{2}\d{2}"/>
      <xsd:whiteSpace value="collapse"/>
    </xsd:restriction>
  </xsd:simpleType>

\d{4}-\d{2}-\d{2}可能不像您需要遵循公历规则那样严格。例如,20121312将不是有效的公历日期,因为存在no 13th month in the gregorian calendar,但它仍将通过您的正则表达式限制。但是你可以通过几个google搜索来创建一个符合公历规则的正则表达式。

然后,让JAXWS为您做模式验证。请参阅http://www.jroller.com/gmazza/entry/soap_xml_schema_validation上的“激活服务端验证”

此外,如果您必须使用ccyymmdd格式,则不能使用xsd: java.util.Date,在我看来,这会更好,因为Jaxb将从一开始就为您创建一个日期作为您的财产权利。您仍然可以使用自定义的ccyymmdd格式来实现这一点(生成java.util.Date),但这需要做更多的工作。您可能会使用jaxb custom binding。下面的代码将放入您的.jxb文件中并与xjc任务一起使用:

代码语言:javascript
复制
<jxb:bindings node="//xs:simpleType[@name='MySpecialDate']">
  <jxb:javaType name="java.util.Date"
        parseMethod="com.company.DateConverter.parseMySpecialDate" 
        printMethod="com.wpsic.tricare.ws.converter.DateConverter.printMySpecialDate" />
</jxb:bindings>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14724941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档