我有一个奇怪的问题。每当我重新启动服务器(Payara)并执行我的应用程序时,它就会按预期工作。它甚至可能在其他时间工作。但随后它仅抛出ResponseProcessingException
。
重新启动服务器后,它又可以工作1-2次。
StackTrace :
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
的第十行引起的。
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。
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
}
str
是以下形式的URL:http://someUrl.com/rest/id/123
@JsonbDateFormat(locale = DEFAULT_FORMAT)
与@JsonbDateFormat(value = "yyyy-MM-ddTHH:mm:ss")
相同。它似乎可以完美地解析。
答案 0 :(得分: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)非常有趣。你能看看这个模式是否匹配吗?