use of org.apache.cxf.ws.rm.EncoderDecoder in project cxf by apache.
the class RMSoapInInterceptor method decodeHeaders.
public void decodeHeaders(SoapMessage message, List<Header> headers, RMProperties rmps) {
try {
Collection<SequenceAcknowledgement> acks = new ArrayList<>();
Collection<AckRequestedType> requested = new ArrayList<>();
String rmUri = null;
EncoderDecoder codec = null;
Iterator<Header> iter = headers.iterator();
while (iter.hasNext()) {
Object node = iter.next().getObject();
if (node instanceof Element) {
Element elem = (Element) node;
if (Node.ELEMENT_NODE != elem.getNodeType()) {
continue;
}
String ns = elem.getNamespaceURI();
if (rmUri == null && (RM10Constants.NAMESPACE_URI.equals(ns) || RM11Constants.NAMESPACE_URI.equals(ns))) {
LOG.log(Level.FINE, "set RM namespace {0}", ns);
rmUri = ns;
rmps.exposeAs(rmUri);
}
if (rmUri != null && rmUri.equals(ns)) {
if (codec == null) {
String wsauri = null;
AddressingProperties maps = ContextUtils.retrieveMAPs(message, false, false, false);
if (maps == null) {
RMConfiguration config = getManager(message).getEffectiveConfiguration(message);
wsauri = config.getAddressingNamespace();
} else {
wsauri = maps.getNamespaceURI();
}
ProtocolVariation protocol = ProtocolVariation.findVariant(rmUri, wsauri);
if (protocol == null) {
LOG.log(Level.WARNING, "NAMESPACE_ERROR_MSG", wsauri);
break;
}
codec = protocol.getCodec();
}
String localName = elem.getLocalName();
LOG.log(Level.FINE, "decoding RM header {0}", localName);
if (RMConstants.SEQUENCE_NAME.equals(localName)) {
rmps.setSequence(codec.decodeSequenceType(elem));
rmps.setCloseSequence(codec.decodeSequenceTypeCloseSequence(elem));
} else if (RMConstants.SEQUENCE_ACK_NAME.equals(localName)) {
acks.add(codec.decodeSequenceAcknowledgement(elem));
} else if (RMConstants.ACK_REQUESTED_NAME.equals(localName)) {
requested.add(codec.decodeAckRequestedType(elem));
}
}
}
}
if (!acks.isEmpty()) {
rmps.setAcks(acks);
}
if (!requested.isEmpty()) {
rmps.setAcksRequested(requested);
}
} catch (JAXBException ex) {
LOG.log(Level.WARNING, "SOAP_HEADER_DECODE_FAILURE_MSG", ex);
}
}
use of org.apache.cxf.ws.rm.EncoderDecoder in project cxf by apache.
the class SoapFaultFactory method createSoap12Fault.
Fault createSoap12Fault(SequenceFault sf, Message msg) {
SoapFault fault = (SoapFault) createSoap11Fault(sf);
fault.setSubCode(sf.getFaultCode());
Object detail = sf.getDetail();
if (null == detail) {
return fault;
}
try {
RMProperties rmps = RMContextUtils.retrieveRMProperties(msg, false);
AddressingProperties maps = RMContextUtils.retrieveMAPs(msg, false, false);
EncoderDecoder codec = ProtocolVariation.findVariant(rmps.getNamespaceURI(), maps.getNamespaceURI()).getCodec();
setDetail(fault, detail, codec);
} catch (Exception ex) {
LogUtils.log(LOG, Level.SEVERE, "MARSHAL_FAULT_DETAIL_EXC", ex);
ex.printStackTrace();
}
return fault;
}
Aggregations