Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jax ws 事务路由中带有CXF和Camel的自定义@Webfaults_Jax Ws_Cxf_Apache Camel - Fatal编程技术网

Jax ws 事务路由中带有CXF和Camel的自定义@Webfaults

Jax ws 事务路由中带有CXF和Camel的自定义@Webfaults,jax-ws,cxf,apache-camel,Jax Ws,Cxf,Apache Camel,问题:我正在CxfConsumer后面的事务处理路由中抛出@Webfault注释的已检查异常,但在客户端上,details标记不存在,Camel无法将异常映射回我的自定义类型。前面已经讨论过这一点,但没有讨论驼峰部分 我的解决方案是:我找到了我想要实现的东西,为什么它不起作用呢?我开始深入研究CxfConsumer代码,发现我的自定义异常总是包装在RuntimeCamelException中,因此对@Webfault注释的检查失败。在修补CxfConsumer以检查运行时异常的原因后,一切正常

问题:我正在CxfConsumer后面的事务处理路由中抛出@Webfault注释的已检查异常,但在客户端上,details标记不存在,Camel无法将异常映射回我的自定义类型。前面已经讨论过这一点,但没有讨论驼峰部分

我的解决方案是:我找到了我想要实现的东西,为什么它不起作用呢?我开始深入研究CxfConsumer代码,发现我的自定义异常总是包装在RuntimeCamelException中,因此对@Webfault注释的检查失败。在修补CxfConsumer以检查运行时异常的原因后,一切正常

现在我的问题是:我不想使用经过修补的CxfConsumer版本,所以我需要找出我是否做错了什么,或者CxfConsumer是否无法处理我的用例。为什么我的自定义异常被包装在RuntimeCamelException中,我能以某种方式防止这种情况发生,或者我在这里遗漏了什么


谢谢

据我所知,您的问题是“故障细节未设置”。您需要设置它

这是Cxf的标准行为。这背后有安全问题。 在开发模式下,您可以通过向端点添加一些配置参数来禁用此行为

例如,这个spring/bluespring上下文示例启用异常中的细节。在开发中非常有用

<jaxws:endpoint id="TenantsWS" address="/TenantsWS" implementor="#TenantsBean">
    <jaxws:properties>
        <entry key="faultStackTraceEnabled" value="true" />
        <entry key="exceptionMessageCauseEnabled" value="true" />
    </jaxws:properties>
</jaxws:endpoint>
<bean id="TenantsBean" class="com.myfundation.services.WsTenants"/>

如您所见,我只是向“标准”端点配置添加了一些jaxws:properties

对于问题的第二部分,为什么将异常包装在RuntimeCamelException中。。。我不知道。但我个人的例外总是 使用类似以下内容进行注释:WebFault(name=“MyException”)。我非常确定您搜索的所有内容都在jaxws:properties中


cxf->2.7.5

自定义异常是一个选中的异常,驼峰路线被处理。因此,自定义异常被包装在RuntimeCamelException中,RuntimeCamelException反过来回滚事务

如果您有这样的设置,请考虑如果可能的话,从运行时异常中对异常进行子类化。


此外,Camel CxfConsumer应该将RuntimecameleException的原因设置为fault(如果存在),但到目前为止还没有设置。我创建跟踪此问题

设置“exceptionMessageCauseEnabled”没有效果,但是“faultStackTraceEnabled”起作用。很遗憾,我不需要stacktrace。如果您没有将Camel包装在CXF中,那么这可能是一种方法。因此,对不起,我不理解这个问题。您已经了解了Camel中异常的管理吗?是的,这就是我正在使用的。问题与事务路由有关,我补充了一个答案。