Получение необработанного XML от SOAPMessage в Java

Сегодня я успешно прекратил непрерывную рассылку моей формы. Разумеется, этот метод может не всегда работать, но он был прост и хорошо работал для этого конкретного случая.

Я сделал следующее:

  • Я установил свойство action формы в mustusejavascript.asp , который просто показывает сообщение, не работает и что у посетителя должен быть включен javascript.
  • Я установил свойство onsubmit формы в функцию javascript, которая устанавливает свойство действия формы на реальную страницу получения, например receivemessage.asp

Бот, о котором идет речь, по-видимому, не обрабатывает javascript, поэтому я больше не вижу спама. А для человека (с включенным javascript) он работает без каких-либо неудобств или дополнительного взаимодействия вообще. Если у посетителя отключен javascript, он получит четкое сообщение об этом, если он сделает заявку.

73
задан Daniel Lew 6 February 2009 в 22:04
поделиться

2 ответа

Оказывается, что можно получить необработанный XML при помощи Provider< Источник>, таким образом:

import java.io.ByteArrayOutputStream;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;

@ServiceMode(value=Service.Mode.PAYLOAD)
@WebServiceProvider()
public class SoapProvider implements Provider<Source>
{
    public Source invoke(Source msg)
    {
        StreamResult sr = new StreamResult();

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        sr.setOutputStream(out);

        try {
            Transformer trans = TransformerFactory.newInstance().newTransformer();
            trans.transform(msg, sr);

            // Use out to your heart's desire.
        }
        catch (TransformerException e) {
            e.printStackTrace();
        }    

        return msg;
    }
}

я закончил тем, что не нуждался в этом решении, таким образом, я на самом деле не попробовал этот код сам - возможно, требовалась бы некоторую тонкую настройку для разбираний. Но я знаю, что это - правильный путь для потери работоспособности для получения необработанного XML от веб-сервиса.

(я не уверен, как сделать эту работу, если у Вас абсолютно должен быть объект SOAPMessage, но с другой стороны, если бы Вы собираетесь быть обработкой необработанного XML так или иначе, почему Вы использовали бы объект более высокого уровня?)

11
ответ дан childno͡.de 7 November 2019 в 07:54
поделиться

Вы можете попробовать вот так.

SOAPMessage msg = messageContext.getMessage();
ByteArrayOutputStream out = new ByteArrayOutputStream();
msg.writeTo(out);
String strMsg = new String(out.toByteArray());
145
ответ дан 24 November 2019 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: