Я столкнулся с похожей проблемой, но с маршаллингом.
Jaxb2Marshaller имеет свои собственные реализации AttachmentMarshaller
и AttachmentUnarshaller
.Но чтобы это работало, свойство mtomEnabled
должно быть установлено в true.Если это не так, будут использоваться значения по умолчанию, которые не были созданы.
Попробуйте установить setMtomEnabled(true)
на вашем Jaxb2Marshaller.Это, вероятно, решит вашу проблему.
Для людей, которые сталкиваются с той же проблемой при сортировке - это немного сложнее.Jaxb2 AttachmentMarshaller
неправильно реализован в соответствии с WS-I Profile Attachment Profile 1.0 - http://www.ws -i.org / Profiles / AttachmentsProfile-1.0.html # Example_Attachment_Description_Using_swaRef
Вам придетсяпереопределить поведение маршалинга Jaxb2Marshaller
затем.
Примечание: В этом решении предполагается, что MTOM всегда отключен.
@Configuration
class SOAPConfiguration {
@Bean
public Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller() {
@Override
public void marshal(Object graph, Result result, @Nullable MimeContainer mimeContainer) throws XmlMappingException {
try {
javax.xml.bind.Marshaller marshaller = createMarshaller();
if (mimeContainer != null) {
marshaller.setAttachmentMarshaller(
new SwaRefAttachmentMarshaller(mimeContainer)
);
marshaller.marshal(graph, result);
} else {
super.marshal(graph, result, null);
}
} catch (JAXBException ex) {
throw convertJaxbException(ex);
}
}
};
marshaller.setPackagesToScan("my.package");
marshaller.setMtomEnabled(false);
return marshaller;
}
private class SwaRefAttachmentMarshaller extends AttachmentMarshaller {
private final MimeContainer mimeContainer;
private SwaRefAttachmentMarshaller(MimeContainer mimeContainer) {
this.mimeContainer = mimeContainer;
}
@Override
public String addMtomAttachment(DataHandler data, String elementNamespace, String elementLocalName) {
return null;
}
@Override
public String addMtomAttachment(byte[] data, int offset, int length, String mimeType, String elementNamespace, String elementLocalName) {
return null;
}
@Override
public String addSwaRefAttachment(DataHandler data) {
String attachmentId = UUID.randomUUID().toString();
mimeContainer.addAttachment("<" + attachmentId + ">", data);
return "cid:" + attachmentId;
}
}
}