Я работаю над старым кодом:
import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
import org.apache.axiom.om.impl.llom.OMDocumentImpl;
.
.
.
MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(outputStream, format);
if (this.payloadCaching) {
((OMDocumentImpl)axiomMessage).internalSerialize(writer);
} else {
((OMDocumentImpl)axiomMessage).internalSerializeAndConsume(writer);
}
Это компилируется с помощью axiom-api-1.2.6. Тем не менее, он не компилируется с версией 1.2.22. Это ошибка, которую я получаю:
Error:(156, 47) java: no suitable method found for internalSerialize(org.apache.axiom.om.impl.MTOMXMLStreamWriter)
method org.apache.axiom.om.impl.llom.OMDocumentImpl.internalSerialize(org.apache.axiom.om.impl.common.serializer.push.Serializer,org.apache.axiom.om.OMOutputFormat,boolean) is not applicable
(actual and formal argument lists differ in length)
method org.apache.axiom.om.impl.llom.OMDocumentImpl.internalSerialize(org.apache.axiom.om.impl.common.serializer.push.Serializer,org.apache.axiom.om.OMOutputFormat,boolean,boolean) is not applicable
(actual and formal argument lists differ in length)
Как я могу изменить свой код, чтобы он соответствовал новому API?
Я знаю, как создавать аргументы OMOutputFormat
и boolean
. Но я не знаю, как создать аргумент Serializer
. Могу ли я получить Serializer
от writer
?
Ниже приведен весь метод. Код записывает SOAPMessage
в OutputStream
:
public void writeTo(OutputStream outputStream) throws IOException {
try {
SOAPMessage axiomMessage = this.targetMessage.getAxiomMessage();
String charsetEncoding = axiomMessage.getCharsetEncoding();
OMOutputFormat format = new OMOutputFormat();
format.setCharSetEncoding(charsetEncoding);
format.setSOAP11(this.getVersion() == SoapVersion.SOAP_11);
Iterator attachments = this.getAttachments();
if (attachments.hasNext()) {
format.setDoOptimize(true);
}
if (outputStream instanceof TransportOutputStream) {
TransportOutputStream transportOutputStream = (TransportOutputStream)outputStream;
String contentType = format.getContentType();
contentType = contentType + "; charset=\"" + charsetEncoding + "\"";
transportOutputStream.addHeader("Content-Type", contentType);
String soapAction = this.getSoapAction();
transportOutputStream.addHeader("SOAPAction", soapAction);
}
MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(outputStream, format);
if (this.payloadCaching) {
((OMDocumentImpl)axiomMessage).internalSerialize(writer);
} else {
((OMDocumentImpl)axiomMessage).internalSerializeAndConsume(writer);
}
this.writeAttachments(axiomMessage, writer);
writer.flush();
outputStream.flush();
} catch (XMLStreamException var9) {
throw new AxiomSoapMessageException("Could not write message to OutputStream: " + var9.getMessage(), var9);
} catch (OMException var10) {
throw new AxiomSoapMessageException("Could not write message to OutputStream: " + var10.getMessage(), var10);
}
}