private void resetPartTypes(BindingOperationInfo bop) { if (bop.isUnwrapped()) { bop = bop.getWrappedOperation(); } if (bop.isUnwrappedCapable()) { resetPartTypeClass(bop.getWrappedOperation().getOperationInfo().getInput()); resetPartTypeClass(bop.getWrappedOperation().getOperationInfo().getOutput()); resetPartTypeClass(bop.getWrappedOperation().getInput()); resetPartTypeClass(bop.getWrappedOperation().getOutput()); } resetPartTypeClass(bop.getOperationInfo().getInput()); resetPartTypeClass(bop.getOperationInfo().getOutput()); resetPartTypeClass(bop.getInput()); resetPartTypeClass(bop.getOutput()); }
protected MessageContentsList getResponsePayloadList( org.apache.cxf.message.Exchange exchange, List<Source> elements) { BindingOperationInfo boi = exchange.getBindingOperationInfo(); if (boi.isUnwrapped()) { boi = boi.getWrappedOperation(); exchange.put(BindingOperationInfo.class, boi); } MessageContentsList answer = new MessageContentsList(); int i = 0; if (boi.getOutput() != null) { for (MessagePartInfo partInfo : boi.getOutput().getMessageParts()) { if (elements != null && elements.size() > i) { answer.put(partInfo, elements.get(i++)); } } } return answer; }
protected void processFaultDetail(Fault fault, Message msg) { Element exDetail = (Element) DOMUtils.getChild(fault.getDetail(), Node.ELEMENT_NODE); if (exDetail == null) { return; } QName qname = new QName(exDetail.getNamespaceURI(), exDetail.getLocalName()); FaultInfo faultWanted = null; MessagePartInfo part = null; BindingOperationInfo boi = msg.getExchange().get(BindingOperationInfo.class); if (boi == null) { return; } if (boi.isUnwrapped()) { boi = boi.getWrappedOperation(); } for (FaultInfo faultInfo : boi.getOperationInfo().getFaults()) { for (MessagePartInfo mpi : faultInfo.getMessageParts()) { if (qname.equals(mpi.getConcreteName())) { faultWanted = faultInfo; part = mpi; break; } } if (faultWanted != null) { break; } } if (faultWanted == null) { // did not find it using the proper qualified names, we'll try again with just the localpart for (FaultInfo faultInfo : boi.getOperationInfo().getFaults()) { for (MessagePartInfo mpi : faultInfo.getMessageParts()) { if (qname.getLocalPart().equals(mpi.getConcreteName().getLocalPart())) { faultWanted = faultInfo; part = mpi; break; } } if (faultWanted != null) { break; } } } if (faultWanted == null) { return; } Service s = msg.getExchange().get(Service.class); DataBinding dataBinding = s.getDataBinding(); Object e = null; if (isDOMSupported(dataBinding)) { DataReader<Node> reader = this.getNodeDataReader(msg); reader.setProperty(DataReader.FAULT, fault); e = reader.read(part, exDetail); } else { DataReader<XMLStreamReader> reader = this.getDataReader(msg); XMLStreamReader xsr = new W3CDOMStreamReader(exDetail); try { xsr.nextTag(); } catch (XMLStreamException e1) { throw new Fault(e1); } reader.setProperty(DataReader.FAULT, fault); e = reader.read(part, xsr); } if (!(e instanceof Exception)) { try { Class<?> exClass = faultWanted.getProperty(Class.class.getName(), Class.class); if (exClass == null) { return; } if (e == null) { Constructor<?> constructor = exClass.getConstructor(new Class[] {String.class}); e = constructor.newInstance(new Object[] {fault.getMessage()}); } else { try { Constructor<?> constructor = getConstructor(exClass, e); e = constructor.newInstance(new Object[] {fault.getMessage(), e}); } catch (NoSuchMethodException e1) { // Use reflection to convert fault bean to exception e = convertFaultBean(exClass, e, fault); } } msg.setContent(Exception.class, e); } catch (Exception e1) { LogUtils.log(LOG, Level.INFO, "EXCEPTION_WHILE_CREATING_EXCEPTION", e1, e1.getMessage()); } } else { if (fault.getMessage() != null) { Field f; try { f = Throwable.class.getDeclaredField("detailMessage"); ReflectionUtil.setAccessible(f); f.set(e, fault.getMessage()); } catch (Exception e1) { // ignore } } msg.setContent(Exception.class, e); } }
protected static List<Source> getPayloadBodyElements(Message message, Map<String, String> nsMap) { // take the namespace attribute from soap envelop Map<String, String> bodyNC = CastUtils.cast((Map<?, ?>) message.get("soap.body.ns.context")); if (bodyNC != null) { // if there is no Node and the addNamespaceContext option is enabled, this map is available nsMap.putAll(bodyNC); } else { Document soapEnv = (Document) message.getContent(Node.class); if (soapEnv != null) { NamedNodeMap attrs = soapEnv.getFirstChild().getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { Node node = attrs.item(i); if (!node.getNodeValue().equals(Soap11.SOAP_NAMESPACE) && !node.getNodeValue().equals(Soap12.SOAP_NAMESPACE)) { nsMap.put(node.getLocalName(), node.getNodeValue()); } } } } MessageContentsList inObjects = MessageContentsList.getContentsList(message); if (inObjects == null) { return new ArrayList<Source>(0); } org.apache.cxf.message.Exchange exchange = message.getExchange(); BindingOperationInfo boi = exchange.getBindingOperationInfo(); OperationInfo op = boi.getOperationInfo(); if (boi.isUnwrapped()) { op = boi.getWrappedOperation().getOperationInfo(); } List<MessagePartInfo> partInfos = null; boolean client = Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE)); if (client) { // it is a response partInfos = op.getOutput().getMessageParts(); } else { // it is a request partInfos = op.getInput().getMessageParts(); } List<Source> answer = new ArrayList<Source>(); for (MessagePartInfo partInfo : partInfos) { if (!inObjects.hasValue(partInfo)) { continue; } Object part = inObjects.get(partInfo); if (part instanceof Holder) { part = ((Holder<?>) part).value; } if (part instanceof Source) { Element element = null; if (part instanceof DOMSource) { element = getFirstElement(((DOMSource) part).getNode()); } if (element != null) { addNamespace(element, nsMap); answer.add(new DOMSource(element)); } else { answer.add((Source) part); } if (LOG.isTraceEnabled()) { LOG.trace("Extract body element {}", element == null ? "null" : getXMLString(element)); } } else if (part instanceof Element) { addNamespace((Element) part, nsMap); answer.add(new DOMSource((Element) part)); } else { if (LOG.isDebugEnabled()) { LOG.debug("Unhandled part type '{}'", part.getClass()); } } } return answer; }