Spring WS WebServicesTemplate / Jaxb2Marshaller клиентское представление raw xml? - PullRequest
3 голосов
/ 11 мая 2010

Можно ли просмотреть запрос и ответ для клиента Spring WS, используя WebServicesTemplate и Jxb2Marshaller в качестве механизма маршалинга?

Я просто хочу войти в xml, а не выполнять какие-либо действия с необработанным xml.

Ответы [ 2 ]

4 голосов
/ 02 декабря 2010

См. Документацию spring-ws: http://static.springsource.org/spring-ws/sites/2.0/reference/html/common.html#logging

Вы можете регистрировать сообщения через стандартный интерфейс Commons Logging:

Чтобы регистрировать все сообщения на стороне сервера, просто установите регистратор org.springframework.ws.server.MessageTracing на уровень DEBUG или TRACE. На уровне отладки регистрируется только корневой элемент полезной нагрузки; на уровне TRACE - все содержимое сообщения. Если вы хотите только регистрировать отправленные сообщения, используйте регистратор org.springframework.ws.server.MessageTracing.sent; или org.springframework.ws.server.MessageTracing.received для регистрации полученных сообщений.

На стороне клиента существуют похожие регистраторы: org.springframework.ws.client.MessageTracing.sent и org.springframework.ws.client.MessageTracing.received.

1 голос
/ 11 мая 2010

Был в состоянии понять это - если вы добавите ClientInterceptor, как это к перехватчикам WebServicesTemplate:

package com.wuntee.interceptor;

import java.io.ByteArrayOutputStream;

import org.apache.log4j.Logger;
import org.springframework.ws.client.WebServiceClientException;
import org.springframework.ws.client.support.interceptor.ClientInterceptor;
import org.springframework.ws.context.MessageContext;

public class LoggerInterceptor implements ClientInterceptor {
    private Logger logger = Logger.getLogger(this.getClass().getName());

    public boolean handleFault(MessageContext context) throws WebServiceClientException {
        return false;
    }

    public boolean handleRequest(MessageContext context) throws WebServiceClientException {
        logger.info("handleRequest");
        logRequestResponse(context);        
        return true;
    }

    public boolean handleResponse(MessageContext context) throws WebServiceClientException {
        logger.info("handleResponse");
        logRequestResponse(context);
        return true;
    }

    private void logRequestResponse(MessageContext context){
        try{
            logger.info("Request:");
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            context.getRequest().writeTo(out);
            byte[] charData = out.toByteArray();
            String str = new String(charData, "ISO-8859-1");
            logger.info(str);
        } catch(Exception e){
            logger.error("Could not log request: ", e);
        }

        if(context.hasResponse()){
            try{
                logger.info("Response:");
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                context.getResponse().writeTo(out);
                byte[] charData = out.toByteArray();
                String str = new String(charData, "ISO-8859-1");
                logger.info(str);
            } catch(Exception e){
                logger.error("Could not log response: ", e);
            }
        }
    }

}
...