【问题标题】:Mule CE JSON support erroringMule CE JSON 支持错误
【发布时间】: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


【解决方案1】:

这纯粹是一个没有明确记录的 Jersey Path 错误。操作错误....

顺便说一句 - 在这种情况下,Mule 详细日志记录没有添加任何细节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多