/** * Creates a <code>XFireFault</code> from the given throwable. If the throwable is a <code>XFireFault</code>, it is * not wrapped. * * @param throwable the throwable * @return the fault */ public static XFireFault createFault(Throwable throwable) { XFireFault fault = null; if (throwable instanceof XFireFault) { fault = (XFireFault) throwable; } else { fault = new XFireFault(throwable); } return fault; }
protected void handleFault(MessageContext context, XFireFault fault, Throwable cause, MessagePartInfo faultPart) throws XFireFault { JDOMStreamWriter writer = new JDOMStreamWriter(fault.getDetail()); Object faultBean = getFaultBean(cause, faultPart, context); try { AbstractBinding.writeParameter(writer, context, faultBean, faultPart, faultPart.getName().getNamespaceURI()); } catch (XMLStreamException e) { throw new XFireFault("Could not write to outgoing stream.", e, XFireFault.RECEIVER); } }
try Map namespaces = fault.getNamespaces(); for (Iterator itr = namespaces.keySet().iterator(); itr.hasNext();) writeQName(writer, fault.getFaultCode()); if (fault.getSubCode() != null) writeQName(writer, fault.getSubCode()); if (fault.getReason() != null) writer.writeCharacters(fault.getReason()); if (fault.getRole() != null) writer.writeCharacters(fault.getRole()); writer.writeEndElement(); if (fault.hasDetails()) Element detail = fault.getDetail();
private void assertSingle(Element root, String tagName, Namespace wsa) throws XFireFault { List list = root.getChildren(tagName,wsa); if( list!= null ){ if(list.size()> 1){ XFireFault fault = new XFireFault("Invalid header",new QName(wsa.getURI(),"Sender")); fault.addNamespace("wsa",wsa.getURI()); fault.setSubCode(new QName(wsa.getURI(),"InvalidAddressingHeader")); Element detail = new Element("ProblemHeaderQName",wsa); detail.addContent(tagName); fault.setDetail(detail); throw fault; } } }
public void writeMessage(OutMessage message, XMLStreamWriter writer, MessageContext context) throws XFireFault { try { XFireFault fault = (XFireFault) message.getBody(); if (fault.hasDetails()) { Element detail = fault.getDetail(); StaxSerializer serializer = new StaxSerializer(); List details = detail.getContent(); for (int i = 0; i < details.size(); i++) { serializer.writeElement((Element) details.get(i), writer); } } else { writer.writeStartElement("stack"); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); fault.printStackTrace(pw); pw.close(); writer.writeCData(sw.toString()); writer.writeEndElement(); // stack } } catch (XMLStreamException e) { throw new XFireRuntimeException("Couldn't create fault.", e); } }
public void readMessage(InMessage message, MessageContext context) throws XFireFault XFireFault fault = new XFireFault(); if (reader.getLocalName().equals("faultcode")) fault.setFaultCode(NamespaceHelper.readQName(reader)); fault.setMessage(reader.getElementText()); fault.setRole(reader.getElementText()); fault.setDetail(builder.build(new FragmentStreamReader(reader)).getRootElement()); throw new XFireFault("Could not parse message.", e, XFireFault.SENDER);
Map namespaces = fault.getNamespaces(); if (namespaces != null) QName faultCode = fault.getFaultCode(); String codeString; if (faultCode.equals(XFireFault.RECEIVER)) writer.writeCharacters(fault.getMessage()); writer.writeEndElement(); if (fault.hasDetails()) Element detail = fault.getDetail(); if (fault.getRole() != null) writer.writeCharacters(fault.getRole()); writer.writeEndElement();
if (!xfireFault.hasDetails()) { logger.debug("XFireFault has no details"); return t; List details = xfireFault.getDetail().getContent(); Element detail = null; for (Object o : details) { .unmarshal(new StreamSource(bais), infoClass); Constructor<?> cst = exceptions[i].getConstructor(String.class, infoClass); return (Exception) cst.newInstance(xfireFault.toString(), obj.getValue()); } catch (Throwable e) { logger.debug("Error: {}", e);
fault.setProperty(SOAP_FAULT_CODE, xFault.getFaultCode()); fault.setProperty(SOAP_FAULT_REASON, xFault.getReason()); fault.setProperty(SOAP_FAULT_ROLE, xFault.getRole()); fault.setProperty(SOAP_FAULT_SUBCODE, xFault.getSubCode()); } else { String charSet = ctx.getOutMessage().getEncoding();
protected void processFaultDetail(XFireFault fault, MessageContext context) throws Exception { Element exDetail = (Element) fault.getDetail().getChildren().get(0); MessagePartInfo faultPart = getFaultPart(context.getExchange().getOperation(), exDetail); if (faultPart == null || faultPart.getTypeClass() == null) return; BindingProvider provider = context.getService().getBindingProvider(); JDOMStreamReader reader = new JDOMStreamReader(exDetail); reader.nextTag(); Object e = (Object) provider.readParameter(faultPart, reader, context); if (!(e instanceof Exception)) { Class exClass = ((FaultInfo) faultPart.getContainer()).getExceptionClass(); Constructor constructor = exClass.getConstructor(new Class[] {String.class, faultPart.getTypeClass()}); e = constructor.newInstance(new Object[] {fault.getMessage(), e}); } context.getExchange().getFaultMessage().setBody(e); }
@Override public void invoke(MessageContext context) throws Exception { XFireFault fault = (XFireFault) context.getExchange().getFaultMessage().getBody(); Throwable cause = fault.getCause(); if (cause != null) { handleFault(context, fault, cause, null /*fault info is ignored*/); } }
public void invoke(MessageContext context) throws Exception { Throwable e = (Throwable) context.getProperty(EXCEPTION); XFireFault fault = XFireFault.createFault(e); // get the root cause so we know what level to log if (fault.getCause() != null) e = fault.getCause(); if (e instanceof RuntimeException) { log.error("Fault occurred!", e); } else if (log.isInfoEnabled()) { log.info("Fault occurred!", e); } context.setCurrentMessage(context.getExchange().getFaultMessage()); Service service = context.getService(); if (service == null || service.getFaultSerializer() == null || !context.getExchange().hasFaultMessage()) { sendToDeadLetter(fault, context); } else { sendFault(fault, context); } }
public void readMessage(InMessage message, MessageContext context) throws XFireFault XFireFault fault = new XFireFault(); fault.setFaultCode(NamespaceHelper.readQName(reader)); fault.setSubCode(NamespaceHelper.readQName(reader)); fault.setMessage(reader.getElementText()); fault.setRole(reader.getElementText()); fault.setDetail(builder.build(new FragmentStreamReader(reader)).getRootElement()); throw new XFireFault("Could not parse message.", e, XFireFault.SENDER);
@Override protected void handleFault(MessageContext context, XFireFault fault, Throwable cause, MessagePartInfo faultPart) throws XFireFault { Object faultBean = getFaultBean(cause, faultPart, context); if (faultBean != null) { try { JAXBContext jaxbContext = JAXBContext.newInstance(faultBean.getClass()); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); marshaller.setAttachmentMarshaller(new AttachmentMarshaller(context)); JDOMStreamWriter writer = new JDOMStreamWriter(fault.getDetail()); marshaller.marshal(faultBean, writer); } catch (JAXBException e) { LOG.error("Unable to marshal the fault bean of type " + faultBean.getClass().getName() + ".", e); //fall through... let the fault be handled by something else... } } }
@Override public void invoke(MessageContext context) throws Exception { XFireFault fault = (XFireFault) context.getExchange().getFaultMessage().getBody(); Throwable cause = fault.getCause(); if (cause != null) { handleFault(context, fault, cause, null /*fault info is ignored*/); } }
/** * Loads the property descriptors for the ordered properties of the specified class. * * @param wrapperClass The wrapper class. * @return The ordered property descriptors. */ protected PropertyDescriptor[] loadOrderedProperties(Class wrapperClass) throws XFireFault { String[] propOrder = annotations.getPropertyOrder(wrapperClass); if (propOrder == null) { throw new XFireFault("Unable use use " + wrapperClass.getName() + " as a wrapper class: no propOrder specified.", XFireFault.RECEIVER); } BeanInfo responseBeanInfo; try { responseBeanInfo = Introspector.getBeanInfo(wrapperClass, Object.class); } catch (IntrospectionException e) { throw new XFireFault("Unable to introspect " + wrapperClass.getName(), e, XFireFault.RECEIVER); } return PropertyUtil.sortProperties(wrapperClass, responseBeanInfo.getPropertyDescriptors(), propOrder); }
throw new XFireFault(me.getError(), XFireFault.RECEIVER); } else { throw new XFireFault("Unkown Error", XFireFault.RECEIVER); me.setStatus(ExchangeStatus.DONE); channel.send(me); XFireFault xfireFault = new XFireFault(str, XFireFault.RECEIVER); xfireFault.getDetail().addContent(e); throw xfireFault; } else if (me.getMessage("out") != null) {
@Override protected void handleFault(MessageContext context, XFireFault fault, Throwable cause, MessagePartInfo faultPart) throws XFireFault { Object faultBean = getFaultBean(cause, faultPart, context); if (faultBean != null) { try { JAXBContext jaxbContext = JAXBContext.newInstance(faultBean.getClass()); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); marshaller.setAttachmentMarshaller(new AttachmentMarshaller(context)); JDOMStreamWriter writer = new JDOMStreamWriter(fault.getDetail()); marshaller.marshal(faultBean, writer); } catch (JAXBException e) { LOG.error("Unable to marshal the fault bean of type " + faultBean.getClass().getName() + ".", e); //fall through... let the fault be handled by something else... } } }
public void invoke(MessageContext context) throws Exception { XFireFault fault = (XFireFault) context.getExchange().getFaultMessage().getBody(); Throwable cause = fault.getCause(); OperationInfo op = null; if (context.getExchange() != null) op = context.getExchange().getOperation(); if (cause == null || op == null) return; FaultInfo faultPart = getFaultForClass(op, cause.getClass()); if (faultPart != null) { handleFault(context, fault, cause, (MessagePartInfo) faultPart.getMessageParts().get(0)); } }