在我的JAXWSWeb服务中,当发生异常时,我需要将特定消息发送回客户端,而不是带有异常描述的标准Fault消息。
如何做到这一点?
我使用的是jaxws-rt版本2.1.3
我已经尝试过使用这样的异常映射器,但是没有成功(有些不被调用,这也可能是由于配置错误造成的):
@Provider
public class ThrowableExceptionMapper implements ExceptionMapper<Throwable> {
public ThrowableExceptionMapper() {
// TODO Auto-generated constructor stub
}
@Override
public Response toResponse(Throwable throwable) {
if (throwable instanceof WebApplicationException) {
return ((WebApplicationException) throwable).getResponse();
} else {
return Response.serverError().entity("").build();
}
}
}
我们使用的服务器是JBoss EAP 6.4。
编辑:
异常映射器方法不适合我的JAXWS Web服务,因为这是用于JAX-RS的(感谢SRINIVAS K)。JAXWS有类似的东西吗?
你能检查ExceptionMapper是否适用于Throwable或Exception等通用异常吗?
我看到了一些使用WebFault注释配置的自定义异常示例。
你能试着用下面的吗?
String errorMessage = "this is custom error message";
return Response.status(e.getResponse().getStatus()).entity(errorMessage).build();
我设法在这个页面的帮助下重写了响应消息:
http://www.java-tips.org/java-ee-tips-100042/156-java-api-for-xml-web-services/1958-writing-a-handler-in-jax-ws.html
下面是本页的一些例子:< br > http://www.programcreek.com/java-api-examples/index.php?API = javax . XML . ws . handler . message context
我把这个类放在一起:
public class MyLogicalHandler implements LogicalHandler<LogicalMessageContext> {
private final String RejectionResponseBody = "<ns2:MessageControllerResponse xmlns:ns2=\"http://some.namespace.com/\"><return>SOMEDATA</return></ns2:MessageControllerResponse>";
@Override
public boolean handleMessage(LogicalMessageContext context) {
return true;
}
@Override
public boolean handleFault(LogicalMessageContext context) {
processMessage(context);
return true;
}
@Override
public void close(MessageContext context) {
}
private void processMessage(LogicalMessageContext context) {
Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty) {
LogicalMessage msg = context.getMessage();
msg.setPayload(new StreamSource(new ByteArrayInputStream(RejectionResponseBody.getBytes())));
}
}
}
编辑,添加了附加信息:
您还需要向web服务添加HandlerChain注释:
...
@HandlerChain(file = "handler-chain.xml")
public class MyWebService {
...
}
并创建一个handler-chain xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<handler-class>my.package.ws.jaxws.MyLogicalHandler</handler-class>
</handler>
</handler-chain>
</handler-chains>
并将此文件放在 Web 服务的资源文件夹中,您需要使用与 Web 服务相同的包结构。因此,请创建以下包:如果您的 Web 服务类驻留在资源文件夹中,my.package.ws my.package.ws 包中。
/** 自定义消息发送接口(目前只支持文本消息发送) @param chatController 聊窗实体(必须是小能SDK创建的聊窗实体NtalkerChatController类型) @param type 消息类型: 11:文本消息 12:图片消息 13:语音消息 14:视频消息 @param message 消息内容 */ NSString *str = @“自定义文本消息test”;
我想做以下事情: 感谢任何回应。 我的单元测试如下: 演示方法用于组装tlv(我们的自定义协议)对象。 关键日志如下: 创建的TcpClient工作不好,我不知道如何更正,有人能告诉我一种正确的方法吗。
我想向我的whatsapp收件人发送whatsapp消息,但whatsapp收件人需要通过向您在沙盒中选择的电话号码发送“加入[关键字]”whatsapp消息来选择加入 我想发送消息而不需要发送“加入[关键字]”WhatsApp消息
我是一名Java编程新手(实际上已经在学习),我对如何处理不同的消息有些怀疑。 我的目标是将这些不同的消息包含在同一个类(CustomExcpse类)中,以避免在从其他类抛出新CustomExceptions的每个方法上一遍又一遍地编写相同的字符串。 到目前为止,我编码: > 一个自定义异常类,它从异常扩展而来,具有不同的消息(在示例中只有两个,但还有更多)作为Strings包含,当然还有构造函数
我试图读取来自CXF拦截器的SOAP错误消息,但我无法提取,我捕获了来自Fidler的响应 以下是菲德勒的回应 以下是我的代码 向客户端添加了FaultInterceptor
我在spring boot RESTfull项目中有一些特殊情况,而不是标准的自定义身份验证异常时的错误消息。我需要一个不同的消息取决于用户名或密码是错误的,或者如果用户名不存在,或者如果用户在数据库中被停用。目前我只能得到消息,我还没有找到任何解决方案,如何根据用户属性或特殊情况自定义消息。 我当前有如下自定义身份验证提供程序: 我有这样的定制用户详细信息服务: 在哪里可以处理来自的消息,并将其