java - SOAP 请求中的 DataHandler
问题描述
Web 服务要求我设置一个应为 xml 附件的 DataHandler 类型。
DataSource dataSource = new FileDataSource(tempFile.getAbsolutePath());
DataHandler dataHandler = new DataHandler(dataSource);
request.setDataHandler(dataHandler);
问题是从 Axis2 生成的 SOAPMessage 的值为 base64
<dataHandler>big string64 string representing my content</dataHandler>
相反,它应该在哪里
<dataHandler><inc:Include href="cid:attachmentid" xmlns:inc="http://www.w3.org/2004/08/xop/include"/></dataHandler>
Content-Type: text/xml; charset=us-ascii; name=Sample.xml
Content-Transfer-Encoding: 7bit
Content-ID: <attachmentid>
Content-Disposition: attachment; name="Sample.xml"; filename="Sample.xml"
... the xml content....
WSDL
<xsd:element name="dataHandler" type="xsd:base64Binary" maxOccurs="1" minOccurs="1" xmime:expectedContentTypes="application/octet-stream"/>
我能做些什么来解决这个问题?
解决方案
我的 xmlobject 中有一个值,它是一个 DataHandler,这是我将 datahandler 作为一个包含 xml 的对象放入值的解决方案:
带有根元素的 XmlObject:
RootXmlObject xml = new RootXmlObject();
然后你设置 marshaller 转换为字符串:
JAXBContext context = JAXBContext.newInstance(RootXmlObject.class);
Marshaller mar= context.createMarshaller();
mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter sw = new StringWriter();
mar.marshal(xml, sw);
String xmlString = sw.toString();
创建自定义数据处理程序:
DataHandler.setDataContentHandlerFactory(new YourDatahandler());
private class YourDatahandler implements DataContentHandlerFactory {
@Override
public DataContentHandler createDataContentHandler(String mimeType) {
return new XmlDataContentHandler();
}
}
public static class XmlDataContentHandler implements DataContentHandler {
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] {DataFlavor.stringFlavor};
}
@Override
public Object getTransferData(DataFlavor dataFlavor, DataSource dataSource) throws UnsupportedFlavorException, IOException {
return new String("Whateverstring");
}
@Override
public Object getContent(DataSource dataSource) throws IOException {
return new String("Whateverstring");
哪个“writeTo”方法是这样工作的:
@Override
public void writeTo(Object o, String s, OutputStream outputStream) throws IOException {
byte[] stringByte = (byte[]) ((String) o).getBytes("UTF-8");
outputStream.write(stringByte);
}
最后将 xmlString 插入 Datahandler:
DataHandler testHandler = new DataHandler(xmlString, "text/xml");
这是我的项目的链接:https ://github.com/habelo/domibusdemo
推荐阅读
- python - 如何将pickle文件的文件夹转换为单个csv文件
- ios - 无法在 iOS 中连接 firebase crashlytics
- latex - 如何在 LaTeX 中编写标题页?
- javascript - 延迟加载缩略图时阻止 YouTube Cookie
- java - 在 pkcs7 中验证 ECDSA 签名时出错
- amazon-web-services - AWS Key Management Service 散列和加密
- postman - 在预请求脚本中获取环境变量时未解析邮递员嵌套变量
- uipath - UiPath 自动化协助
- java - java.lang.NoSuchMethodError: org.apache.wicket.request.cycle.RequestCycle.find(Ljava/lang/Class;)Lorg/apache/wicket/request/IRequestHandler;
- image - 有没有办法将动态加载的图像文件合并到一个图像文件中?