相关疑难解决方法(0)

覆盖CXF错误处理

我正在开发一些基于Web服务的应用程序,我有一个关于Apache CXF解组的问题.在我们的项目中,我们使用CXF 2.4.1版本.

当某些SOAP请求不正确时(例如某些字段是文本而不是数字),CXF会抛出标准的SOAPFaultException,并使用以下标准字段构建SOAP响应:

<soap:Fault>
    <faultcode>soap:Client</faultcode>
    <faultstring>Unmarshalling Error: some field missing</faultstring>
</soap:Fault>
Run Code Online (Sandbox Code Playgroud)

项目要求说,如果出现任何故障,系统需要以其他格式响应,例如:

<soap:body>
    <ResponseState>
        <ErrorCode>2732</ErrorCode>
        <ErrorMessage>Unmarshalling Error: some field missing</ErrorMessage>
        <ErrorDetails> some details </ErrorDetails>
        <some other fields>
        ...
    </ResponseState>
</soap:body>
Run Code Online (Sandbox Code Playgroud)

所以问题是:如何以某种方式覆盖此错误处理并以我的格式响应,而不是默认?

提前致谢.

PS我试图查看一些ValidationEventHandler主体,但它在CXF 2.0及更高版本中以其他方式工作.

java soap cxf

9
推荐指数
1
解决办法
7612
查看次数

JAXB unmarshal验证抛出cvc-elt.1:找不到元素错误的声明

我对JAXB和验证都不熟悉,并花了几个小时试图弄清楚这个问题无济于事.我创建了一个简单的JAXB unmarshaller示例来解析XML文件.我也创建了一个合适的XSD文件,但验证器一直在抱怨它无法找到元素的声明.

我认为它可能与命名空间问题有关,但我已经尝试了我能想到的一切,但似乎仍无法解决错误.据我所知,我的XSD和XML是正确的,所以它可能与我实例化unmarshaller的方式有关,但我似乎无法在任何地方找到问题.

我一直得到的错误/异常是:

Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'calculateBorrowingDataResponse'.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
    at org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.startElement(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.startElement(ValidatingUnmarshaller.java:85)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:47)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:113)
    at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:236)
    at com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:119)
    at com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:102)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:299)
    ... 2 more
Run Code Online (Sandbox Code Playgroud)

以下是导致错误的源文件.

Java代码:

// We need a Document
InputStream is = UnmarshalTest.class.getClassLoader().getResourceAsStream("calculateBorrowingDataResponse.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Node node = db.parse(is);

// Creating an unmarshaller …
Run Code Online (Sandbox Code Playgroud)

validation jaxb unmarshalling

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

cxf ×1

java ×1

jaxb ×1

soap ×1

unmarshalling ×1

validation ×1