Ошибка с JAX-WS Не удалось создать сообщение SOAP из-за исключительной ситуации: ошибка чтения XML: WstxUnexpectedCharException: неожиданный символ '[' - PullRequest
4 голосов
/ 30 декабря 2011

Это показывает следующую ошибку, и я не знаю, почему, кто-то может мне помочь?

Ошибка:

Не удалось создать сообщение SOAP из-за исключительной ситуации: ошибка чтения XML: com.ctc.wstx.exc.WstxUnexpectedCharException: неожиданный символ '[' (код 91) в прологе; ожидается '<' в [row, col {unknown-source}]: [1,1] </p>

Я звоню по следующей функции:

private static ContractTermsDownloadReply contractTermsDownloadOperation(
        ContractTermsDownloadRequest body) {
    ContractTermsDownload service = null;
    try {
        URI uri = new URI("https://companyname.com/ContractTermsDownload");
        service = new ContractTermsDownload(uri.toURL());
    } catch (Exception ex) {
        Logger.getLogger(JavaApplication1.class.getName()).log(
                Level.SEVERE, null, ex);
    }

    ariba.sourcing.vrealm_1461.ContractTermsDownloadPortType port = service
            .getContractTermsDownloadPortType();
    BindingProvider prov = (BindingProvider) port;
    prov.getRequestContext().put("authorization",
            "Basic User2011:Password2011");

    try {
        ContractTermsDownloadReply reply = port
                .contractTermsDownloadOperation(body);
        return reply;
    } catch (Exception exc) {
        System.out.println(exc.getMessage());
    }
    return null;
} 

Ответы [ 3 ]

1 голос
/ 05 января 2012

Если вы используете BasicAuth, учетные данные обычно будут закодированы в Base64.Пожалуйста, обратите внимание на эту строку, чтобы включить синтаксис:

prov.getRequestContext().put("authorization", "Basic User2011:Password2011");
0 голосов
/ 24 января 2012

В конце мне пришлось использовать библиотеку CFX , и она работала нормально, код такой:

Client client = ClientProxy.getClient(contractTermsDownloadPortType);
client.getOutInterceptors().add(new AbstractOutDatabindingInterceptor(Phase.MARSHAL) {

        public void handleFault(Message message) {
        }

        public void handleMessage(Message message) throws Fault {
            MetadataMap<String, Object> headers = new MetadataMap<String, Object>();
            headers.putSingle("authorization", "Basic User:Password2012");
            message.put(Message.PROTOCOL_HEADERS, headers);
        }
    });

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

0 голосов
/ 30 декабря 2011

Когда я сталкиваюсь с такими проблемами, мне нужно увидеть сообщение SOAP, которое было отправлено на сервер.Я запускаю tcpmon и настраиваю мой клиент для отправки запроса в tcpmon.Можете ли вы сделать это для проверки сообщения SOAP, создаваемого вашим клиентом?

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