Я использую свитер для WS REST. Как я включаю журналы свитера в стороне сервера?
Длинная история: Я получаю клиентское исключение - но я ничего не вижу в журналах кота [Оно даже не достигает моего метода]. Так как отслеживание стека говорит "toReturnValue", это действительно получало что-то от сервера. Но я не знаю что сказанный сервер.
Exception in thread "main" java.lang.IllegalArgumentException: source parameter must not be null
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:98)
at com.sun.xml.internal.ws.message.AbstractMessageImpl.readPayloadAsJAXB(AbstractMessageImpl.java:100)
**at com.sun.xml.internal.ws.client.dispatch.JAXBDispatch.toReturnValue(JAXBDispatch.java:74)**
at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.doInvoke(DispatchImpl.java:191)
at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.invoke(DispatchImpl.java:195)
Если вы хотите включить ведение журнала на стороне сервера, вам необходимо зарегистрировать фильтр LoggingFilter Jersey (на стороне контейнера).
Этот фильтр регистрирует заголовки запросов / ответов и объекты .
Вот что вам нужно добавить в ваш класс ResourceConfig
:
@ApplicationPath("/")
public class MyApplication extends ResourceConfig {
public MyApplication() {
// Resources.
packages(MyResource.class.getPackage().getName());
register(LoggingFilter.class);
}
}
Обратите внимание, что тот же фильтр работает и на стороне клиента.
Client client = Client.create();
client.addFilter(new LoggingFilter());
Не могли бы вы показать нам свой клиентский код и также рассказать нам о запросе?
Это исключение, похоже, указывает на шаг демаршалинга JAXB.По-видимому, вы получили некоторый XML из своего REST API, но вы не получаете того, чего ждете.
Возможно, XSD, который вы используете для маршалинга / демаршалинга, устарел или просто неверен.
Может быть, вы пытаетесь понять не ту сущность из ответа.
Попробуйте выполнить следующие действия и расскажите подробнее о своей проблеме:
Используя REST-клиент, например Client REST simple (расширение Chrome), или ваш код:
Builder builder = webResource.path("/yourapi/").accept("application/xml");
// get the client response
ClientResponse response = builder.get(ClientResponse.class);
// log the HTTP Status
logger.log("HTTP Status: " + response.getStatus());
// bypass the jaxb step and get the full response
// MyResource myResource = response.getEntity(MyResource.class);
String myResource = response.getEntity(String.class);
logger.log(myResource);
Этот тест должен завершиться неудачно (если я прав).