从 Spring-WS 中的 getWebServiceTemplate().marshalSendAndReceive() 获取 byte[] 响应

Get byte[] response from getWebServiceTemplate().marshalSendAndReceive() in Spring-WS

在目标 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));
}

returns 和 Object 我不能简单地转换为 byte[] 或序列化它。 如何从响应中提取 byteArray 结果?

UDP:补充一点信息。

ObjectFactory()方法:

@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"/>

帮助了我的同事Senior。

在这种情况下 marshalSendAndReceive() returns 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();
    }