我有一个问题,我已经解决了一段时间,加上我是apache camel的新手,它没有帮助。
我的简单应用程序使用CXF(使用jetty作为http引擎)公开SOAP web服务,然后使用Camel将SOAP请求传递给akka参与者。
我希望在通往actor的道路上验证SOAP请求,并检查它是否包含某些头部和内容值。我不想使用CXF拦截器。问题是,camel中发生的事情(异常,错误消息返回)不会传播到CXF。我总是在日志中得到成功202作为响应和关于验证异常的信息。
class RequestActor extends Actor with WithLogger {
def receive = {
case CamelMessage(body: Request, headers) =>
logger.info(s"Received Request $body [$headers]")
case msg: CamelMessage =>
logger.error(s"unknown message ${msg.body}")
}
}
class CustomRouteBuilder(endpointUrl: String, serviceClassPath: String, system: ActorSystem)
extends RouteBuilder {
def configure {
val requestActor = system.actorOf(Props[RequestActor])
from(s"cxf:${endpointUrl}?serviceClass=${serviceClassPath}")
.onException(classOf[PredicateValidationException])
.handled(true)
.process(new Processor {
override def process(exchange: Exchange): Unit = {
val message = MessageFactory.newInstance().createMessage();
val envelope = message.getSOAPPart().getEnvelope();
val body = message.getSOAPBody();
val fault = body.addFault();
fault.setFaultCode("Server");
fault.setFaultString("Unexpected server error.");
val detail = fault.addDetail();
val entryName = envelope.createName("message");
val entry = detail.addDetailEntry(entryName);
entry.addTextNode("The server is not able to complete the request. Internal error.");
log.info(s"Returning $message")
exchange.getOut.setFault(true)
exchange.getOut.setBody(message)
}
})
.end()
.validate(header("attribute").isEqualTo("for_sure_not_defined"))
.to(genericActor)
}
}
object Init extends App {
implicit val system = ActorSystem("superman")
val camel = CamelExtension(system)
val camelContext = camel.context
val producerTemplate = camel.template
val endpointClassPath = classOf[Service].getName
val endpointUrl = "http://localhost:1234/endpoint"
camel.context.addRoutes(new CustomRouteBuilder(endpointUrl, endpointClassPath, system))
}
exchange.getOut.setFault(true)
exchange.getOut.setBody(message)
我不确定您在寻找什么,但我以不同的方式处理了CXFendpoint的异常。我必须在SOAPFault中返回带有自定义详细信息的HTTP-500(如验证错误消息等),所以...
>
保持Camel未处理的异常,以将其传递给CXF.onException(classof[PredicateValidationException]).handled(false)
创建org.apache.cxf.interceptor.fault
对象,包含所有需要的异常细节。(不是肥皂错误)。它允许设置自定义详细信息元素,自定义FaultCode元素,消息。
问题内容: 我有类似的服务 我想从控制器做类似 getCurrentPosition可以正常工作,并且城市也已确定,但是我不知道如何在控制器中访问城市。 怎么了? 调用getCurrentCity时,它将调用getCurrentPosition来确定gps坐标。该坐标作为参数传递给onSuccess方法,对吗?因此,这与我要在getCurrentCity方法中执行的操作完全相同,但我不知道如何做。
...下面的类是骆驼处理器,它最终被调用: 我知道Apache CXF使用的Exchange类与Camel使用的Exchange不同,但是这两种集成技术之间应该有一种传递信息的方式?
我有一个.NET应用程序,其中有一个用于接收用户请求的控制器,一个服务调用另一个服务。我在中有一些代码,当用户请求值不正确时,我查询数据库(DynamoDB)并得到500错误的响应。我想处理这个问题,这样我就可以捕捉到这个错误/异常,并将错误消息连同一个400状态码一起从控制器发回给用户。我应该如何修改代码来做到这一点? 这是我尝试过的。目前,我只是在中打印错误,但我需要将其发送到控制器。通过抛出
我正在测试带注释的javax验证。它们在应用程序中工作良好,方法参数上有注释。但是当我试图通过手动构建验证工厂来测试它们时 我得到以下错误。 javax。验证。ValidationException:HV000183:无法初始化“javax”。艾尔。“表达工厂”。检查类路径上是否有EL依赖项,或者改用ParameterMessageInterpolator 收到这个错误后,我在gradle文件中添
当异常被抛出到组播中时,Camel不会传播异常。 在以下设置下,从其beanref引发异常: 为什么我不能向父路由提出多播异常? 骆驼2.17-快照
下面是我的代码: 这里有个例外: 对象“users”中字段“salary”上的字段错误:拒绝值[null];代码[NotNull.Users.Salary,NotNull.Salary,NotNull.java.lang.Integer,NotNull];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码