Получить ответ byte [] от getWebServiceTemplate (). MarshalSendAndReceive () в Spring-WS - PullRequest
0 голосов
/ 05 мая 2020

В целевой WebService ответ только xs:base64binary, а JAXB не генерирует тип ответа. В моем вызове:

public Object signMessage(SigningRequestType request) {
        JAXBElement<SigningRequestType> jAXBElement = new ObjectFactory().createSigningRequestType(request);
        return getWebServiceTemplate().marshalSendAndReceive(jAXBElement,
                new SoapActionCallback(SIGN_METHOD_ACTION));
}

возвращает Object, и я не могу просто привести к byte[] или сериализовать его. Как я могу извлечь результат byteArray из ответа?

UDP: Добавьте немного дополнительной информации.

ObjectFactory() method:

@XmlElementDecl(namespace = "http://www.roskazna.ru/eb/sign/types/sgv", name = "SigningResponseType")
    public JAXBElement<byte[]> createSigningResponseType(byte[] value) {
        return new JAXBElement<byte[]>(_SigningResponseType_QNAME, byte[].class, null, ((byte[]) value));
    }

XSD:

<xs:element name="SigningResponseType" type="cst:notEmptyB64Binary"/>

1 Ответ

0 голосов
/ 06 мая 2020

Помог мой коллега-старший.

В этом случае marshalSendAndReceive() фактически возвращает JAXBElement. Итак:

public byte[] signMessage(SigningRequestType request) throws IOException {
        JAXBElement<SigningRequestType> jAXBElement 
            = new ObjectFactory().createSigningRequestType(request);

        final Object o = getWebServiceTemplate().marshalSendAndReceive(jAXBElement,
                new SoapActionCallback("http://www.roskazna.ru/eb/sign/types/sgv/Sign"));

        return (byte[]) ((JAXBElement) o).getValue();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...