Приложение работает только на только что запущенном Сервере - PullRequest
0 голосов
/ 15 февраля 2019

У меня странная проблема.Всякий раз, когда я заново запускаю сервер (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, исключение вызывается 10-й строкой функции myFunc в классе MyClass.

com.classes.MyClass.myFunc:

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

Как мне кажется, на первый взгляд, мой код правильный.Значит, с сервером что-то не так?

Я использую Payara 5 на Netbeans 8.2.Я также пробовал GlassFish 5.

Обновление 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

}

Обновление 2:

str - это URL-адрес в форме: http://someUrl.com/rest/id/123

@JsonbDateFormat(locale = DEFAULT_FORMAT) совпадает с @JsonbDateFormat(value = "yyyy-MM-ddTHH:mm:ss").Вроде разбирается без нареканий.

1 Ответ

0 голосов
/ 18 февраля 2019

Можете ли вы напечатать или войти "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) очень интересен.Можете ли вы посмотреть, если этот шаблон соответствует?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...