【发布时间】:2015-01-23 21:41:08
【问题描述】:
我有一个非常基本的 REST 服务在 Mule 3.4 CE 下运行,使用运行时的默认包。与使用相同技术的其他几个服务不同,此服务会引发无法解释的错误。我尝试添加对象到字符串、对象到 json 和自定义转换器。但是这些添加都没有帮助。我在这里的其他帖子或 Mule 论坛中几乎没有看到任何关于这个问题的信息。我已将 Java 代码替换为其他工作服务的副本并得到相同的错误。
有什么想法吗?
JSON:
{
"createDate" : "",
"createdBy" : "RESTClient",
"entry" : "RESTClient Work Log",
"lastUpdate" : "",
"lastUpdatedBy" : "",
"requestTypeId" : 1003,
"resourceId" : 5666,
"workLogId" : 0
}
POJO:
@JsonAutoDetect
public class WorkLog {
private String createDate;
private String createdBy;
private String entry;
private String lastUpdate;
private String lastUpdatedBy;
private Integer requestTypeId;
private Integer resourceId;
private Integer workLogId;
// snip
}
REST 服务:
@Path("/worklogs")
public interface WorkLogWadlResource {
@POST
@Path("/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createWorkLog(@Context HttpHeaders hdr, @Payload final WorkLog log) throws Exception;
}
流程:
<flow name="worklog-flow" doc:name="worklog-flow">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" path="rest/worklogs" />
<logger message="Work Log request, payload: #[message.payload]" level="DEBUG" doc:name="Logger" category="work_log_service" />
<jersey:resources doc:name="Work Log REST Service">
<component>
<spring-object bean="restService" />
</component>
</jersey:resources>
</flow>
错误:
ERROR 2015-01-23 15:53:40,906 [[worklog-mule-1.0.0].connector.http.mule.default.receiver.02]
org.mule.exception.DefaultMessagingExceptionStrategy:
********************************************************************************
Message: Failed to invoke JerseyResourcesComponent{worklog-flow.component.5062}.
Component that caused exception is: JerseyResourcesComponent{worklog-flow.component.5062}.
Message payload is of type: ContentLengthInputStream
Code : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. String index out of range: -1 (java.lang.StringIndexOutOfBoundsException)
java.lang.String:1875 (null)
2. Failed to invoke JerseyResourcesComponent{worklog-flow.component.5062}.
Component that caused exception is: JerseyResourcesComponent{worklog-flow.component.5062}.
Message payload is of type: ContentLengthInputStream (org.mule.component.ComponentException)
org.mule.component.AbstractComponent:144
--------------------------------------------------------------------------------
Root Exception stack trace:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1875)
at com.sun.jersey.spi.container.ContainerRequest.getEncodedPath(ContainerRequest.java:365)
at com.sun.jersey.spi.container.ContainerRequest.getPath(ContainerRequest.java:358)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
【问题讨论】:
-
您可以尝试删除
log上的@Payload注释吗?我认为泽西不需要它。 -
如果没有更好,请在使用
-Dmule.verbose.exceptions=true运行 Mule 时重新发布堆栈跟踪。并展示如何在restService中构建Response实例。 -
大卫,感谢您抽出宝贵时间回复。我同意@Payload 是多余的。我添加它是为了看看它的好处,只是在其他地方没有成功之后。我将尝试在启用 Mule 异常标志的情况下重复调用。我以几种不同的方式构建这些 Response 对象,具体取决于服务,但在这种情况下,调用的进展永远不足以进一步阐明这个问题。
标签: java json rest jersey mule