应用程序仅适用于刚刚启动的服务器

问题描述 投票:0回答:1

我有一个奇怪的问题。每当我刚刚启动服务器(Payara)并执行我的应用程序时,它都按预期工作。它甚至可以再工作一次。但随后它只会抛出一个ResponseProcessingException。 当我重新启动服务器时,它再工作1-2次。

堆栈跟踪:

javax.ws.rs.client.ResponseProcessingException: Unexpected error during response processing.
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:881)
    [...] // more ...
    at fish.payara.requesttracing.jaxrs.client.decorators.JaxrsInvocationBuilderDecorator.get(JaxrsInvocationBuilderDecorator.java:195)
    at com.classes.MyClass.myFunc(MyClass.java:10)
    [...] // more ...
Caused by: java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.yasson.internal.model.SetWithSetter.internalSetValue(SetWithSetter.java:27)
    at org.eclipse.yasson.internal.model.SetValueCommand.setValue(SetValueCommand.java:26)
    at org.eclipse.yasson.internal.model.ReflectionPropagation.setValue(ReflectionPropagation.java:67)
    at org.eclipse.yasson.internal.model.PropertyModel.setValue(PropertyModel.java:295)
    at org.eclipse.yasson.internal.serializer.ObjectDeserializer.lambda$getInstance$0(ObjectDeserializer.java:102)
    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
    [...] // more ...

根据StackTrace,异常是由类myFunc中函数MyClass的第10行引起的。

com.classes.MyClass.myFunc:

SomeObject myFunc(String str) {
    return ClientBuilder.newClient()
            .target(str)
            .request(MediaType.APPLICATION_JSON) // this line
            .get(SomeObject.class);
}

因为它似乎首先起作用,我认为,我的代码是正确的。那么服务器必须要有什么东西吗?

我在Netbeans 8.2上运行Payara 5。我也试过GlassFish 5。

Update 1:

SomeObject.class

import java.time.LocalDate;
import java.time.LocalDateTime;
import javax.json.bind.annotation.JsonbDateFormat;
import static javax.json.bind.annotation.JsonbDateFormat.DEFAULT_FORMAT;
import javax.json.bind.annotation.JsonbTypeDeserializer;

public class SomeObject {

    private int num1;
    @JsonbTypeDeserializer(AnotherClassDeserializer.class)
    private AnotherClass anotherClass;
    @JsonbDateFormat(locale = DEFAULT_FORMAT)
    private LocalDateTime date1;
    @JsonbDateFormat(value = "yyyy-MM-dd")
    private LocalDate date2;
    @JsonbDateFormat(value = "yyyy-MM-dd")
    private LocalDate date3;
    private Boolean yesNo;
    private int num2;
    private int num3;

    // constructor
    // default constructor

    // getter & setter

}

Update 2:

str是以下格式的URL:http://someUrl.com/rest/id/123

@JsonbDateFormat(locale = DEFAULT_FORMAT)@JsonbDateFormat(value = "yyyy-MM-ddTHH:mm:ss")相同。它似乎完美地解析。

java java-ee server glassfish payara
1个回答
0
投票

你能打印或记录“str”吗?然后查看控制台或在XXXXXX ...模式后搜索

JSON字段应与该类匹配

SomeObject myFunc(String str) {
    System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXX" + str);  // or put a breakpoint   
    return ClientBuilder.newClient()
            .target(str)
            .request(MediaType.APPLICATION_JSON) // this line
            .get(SomeObject.class);
}

这个@JsonbDateFormat(locale = DEFAULT_FORMAT)非常有趣。你能看看这个模式是否匹配吗?

© www.soinside.com 2019 - 2024. All rights reserved.