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