[
https://issues.apache.org/activemq/browse/SM-1249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=41441#action_41441
]
Freeman Fang commented on SM-1249:
----------------------------------
Hi Gianfranco,
I think this issue is resolved when fix SM-1158
now we have a findBody method to find the soap body according to the soap
version
this is the code piece from smx 3.2.2 snapshot
private XMLStreamReader createXMLStreamReaderFromMessage(Message message) {
XMLStreamReader xmlReader = null;
StreamSource bodySource = new StreamSource(message
.getContent(InputStream.class));
xmlReader = StaxUtils.createXMLStreamReader(bodySource);
findBody(message, xmlReader);
return xmlReader;
}
private void findBody(Message message, XMLStreamReader xmlReader) {
DepthXMLStreamReader reader = new DepthXMLStreamReader(xmlReader);
try {
int depth = reader.getDepth();
int event = reader.getEventType();
while (reader.getDepth() >= depth && reader.hasNext()) {
QName name = null;
if (event == XMLStreamReader.START_ELEMENT) {
name = reader.getName();
}
if (event == XMLStreamReader.START_ELEMENT &&
name.equals(((SoapMessage)message).getVersion().getBody())) {
reader.nextTag();
return;
}
event = reader.next();
}
return;
} catch (XMLStreamException e) {
throw new RuntimeException("Couldn't parse stream.", e);
}
}
I will close this issue now just for track, if you find any issue, no hesitate
to reopen it.
Thanks anyway.
Freeman
> CXF BC provider doesn't manage Soap 1.2 responses
> -------------------------------------------------
>
> Key: SM-1249
> URL: https://issues.apache.org/activemq/browse/SM-1249
> Project: ServiceMix
> Issue Type: Bug
> Components: servicemix-cxf-bc
> Affects Versions: 3.2.1
> Reporter: Gianfranco Boccalon
> Assignee: Freeman Fang
> Attachments: CxfBcProviderMessageObserver.patch
>
>
> The problem was in the class CxfBcProviderMessageObserver. This class doesn't
> manage Soap 1.2 responses because it uses only the JbiInWsdl1Interceptor, but
> it's the ReadHeadersInterceptor that changes the SoapMessage version
> attribute according to the content of the soap response.
> In the current code the SoapMessage is created, and the default constructor
> set Soap 1.1 version.
> This causes that the getBodyElement method of the class
> JbiInWsdl1Interceptor, doesn't work because it tries to retrieve the wrong
> body from the message.
> I changed the CxfBcProviderMessageObserver adding some of the interceptors
> used in the CxfBcConsumer and changing the creation of the XML stream used to
> read the content of the response, and now it works correctly.
> I also replicated this patch made on the provider itself:
> https://issues.apache.org/activemq/browse/SM-1225?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.