Example #1
0
  public void handleMessage(Message msg) {
    Fault fault = (Fault) msg.getContent(Exception.class);

    if (fault.getDetail() != null
        && !MessageUtils.getContextualBoolean(msg, DISABLE_FAULT_MAPPING, false)) {
      processFaultDetail(fault, msg);
      setStackTrace(fault, msg);
    }

    FaultMode faultMode = FaultMode.UNCHECKED_APPLICATION_FAULT;

    // Check if the raised exception is declared in the WSDL or by the JAX-RS resource
    Method m = msg.getExchange().get(Method.class);
    if (m != null) {
      Exception e = msg.getContent(Exception.class);
      for (Class<?> cl : m.getExceptionTypes()) {
        if (cl.isInstance(e)) {
          faultMode = FaultMode.CHECKED_APPLICATION_FAULT;
          break;
        }
      }
    }

    msg.getExchange().put(FaultMode.class, faultMode);
  }
  public void doCall(String method, Object value) throws Exception {
    Call call = new Call();
    call.setTargetObjectURI("http://soapinterop.org/");
    call.setMethodName(method);
    call.setEncodingStyleURI(encodingStyleURI);

    Vector params = new Vector();
    params.addElement(new Parameter("in", value.getClass(), value, null));
    call.setParams(params);

    // make the call: note that the action URI is empty because the
    // XML-SOAP rpc router does not need this. This may change in the
    // future.
    Response resp = call.invoke(url, "");

    // Check the response.
    if (resp.generatedFault()) {
      Fault fault = resp.getFault();
      System.out.println("Ouch, the call failed: ");
      System.out.println("  Fault Code   = " + fault.getFaultCode());
      System.out.println("  Fault String = " + fault.getFaultString());
    } else {
      Parameter result = resp.getReturnValue();
      System.out.println("Call succeeded: ");
      System.out.println("Result = " + result.getValue());
    }
  }
  private void outputFault(String methodName, Response resp) {
    Fault fault = resp.getFault();

    System.err.println("Generated fault (" + methodName + "()):");
    System.err.println("  Fault Code   = " + fault.getFaultCode());
    System.err.println("  Fault String = " + fault.getFaultString());
  }
Example #4
0
 private void setStackTrace(Fault fault, Message msg) {
   Throwable cause = null;
   Map<String, String> ns = new HashMap<String, String>();
   XPathUtils xu = new XPathUtils(ns);
   ns.put("s", Fault.STACKTRACE_NAMESPACE);
   String ss =
       (String)
           xu.getValue(
               "//s:" + Fault.STACKTRACE + "/text()", fault.getDetail(), XPathConstants.STRING);
   List<StackTraceElement> stackTraceList = new ArrayList<StackTraceElement>();
   if (!StringUtils.isEmpty(ss)) {
     Iterator<String> linesIterator = Arrays.asList(CAUSE_SUFFIX_SPLITTER.split(ss)).iterator();
     while (linesIterator.hasNext()) {
       String oneLine = linesIterator.next();
       if (oneLine.startsWith("Caused by:")) {
         cause = getCause(linesIterator, oneLine);
         break;
       }
       stackTraceList.add(parseStackTrackLine(oneLine));
     }
     if (stackTraceList.size() > 0 || cause != null) {
       Exception e = msg.getContent(Exception.class);
       if (!stackTraceList.isEmpty()) {
         StackTraceElement[] stackTraceElement = new StackTraceElement[stackTraceList.size()];
         e.setStackTrace(stackTraceList.toArray(stackTraceElement));
       }
       if (cause != null) {
         e.initCause(cause);
       }
     }
   }
 }
Example #5
0
  @Test
  public void test_faultcode_messageargs_constructor() {
    IFaultCode expectedFaultCode = ExampleFaultCode.ACCESS_DENIED;

    UncheckedException e = new UncheckedException(expectedFaultCode, "sangeeth");

    Fault expectedFault = Fault.valueOf(expectedFaultCode, "sangeeth");

    AssertEx.assertException(
        null,
        expectedFault,
        expectedFaultCode,
        Locale.getDefault(), // expectedLocale
        expectedFault.getSummary(), // expectedMessage
        Severity.SEVERE, // expectedSeverity
        e); // actualException
  }
Example #6
0
  @Test
  public void test_cause_faultcode_severity_messageargs_constructor() {
    IFaultCode expectedFaultCode = ExampleFaultCode.ACCESS_DENIED;
    IllegalArgumentException expectedCause = new IllegalArgumentException();
    ISeverity expectedSeverity = CustomSeverity.DISASTER;
    UncheckedException e =
        new UncheckedException(expectedCause, expectedFaultCode, expectedSeverity, "sangeeth");

    Fault expectedFault = Fault.valueOf(expectedFaultCode, "sangeeth");

    AssertEx.assertException(
        expectedCause,
        expectedFault,
        expectedFaultCode,
        Locale.getDefault(), // expectedLocale
        expectedFault.getSummary(), // expectedMessage
        expectedSeverity, // expectedSeverity
        e); // actualException
  }
Example #7
0
  @Test
  public void test_faultcode_severity_locale_messageargs_constructor() {
    IFaultCode expectedFaultCode = ExampleFaultCode.ACCESS_DENIED;

    ISeverity expectedSeverity = CustomSeverity.DISASTER;
    UncheckedException e =
        new UncheckedException(expectedFaultCode, expectedSeverity, Locale.FRENCH, "sangeeth");

    Fault expectedFault = Fault.valueOf(expectedFaultCode, Locale.FRENCH, "sangeeth");

    AssertEx.assertException(
        null,
        expectedFault,
        expectedFaultCode,
        Locale.FRENCH, // expectedLocale
        expectedFault.getSummary(), // expectedMessage
        expectedSeverity, // expectedSeverity
        e); // actualException
  }
Example #8
0
  @Test
  public void test_with_undefined_faultCode() {
    IFaultCode expectedFaultCode = UndefinedFaultCode.SOME_FAULT_WITH_NO_DEFINITION;
    ISeverity expectedSeverity = Severity.UNKNOWN;
    UncheckedException e = new UncheckedException(expectedFaultCode);

    Fault expectedFault = Fault.valueOf(expectedFaultCode);

    AssertEx.assertException(
        null,
        expectedFault,
        expectedFaultCode,
        Locale.getDefault(), // expectedLocale
        FaultCode.FQN(expectedFaultCode), // expectedMessage
        expectedSeverity, // expectedSeverity
        e); // actualException
  }
Example #9
0
  private Exception convertFaultBean(Class<?> exClass, Object faultBean, Fault fault)
      throws Exception {
    Constructor<?> constructor = exClass.getConstructor(new Class[] {String.class});
    Exception e = (Exception) constructor.newInstance(new Object[] {fault.getMessage()});

    // Copy fault bean fields to exception
    for (Class<?> obj = exClass; !obj.equals(Object.class); obj = obj.getSuperclass()) {
      Field[] fields = obj.getDeclaredFields();
      for (Field f : fields) {
        try {
          Field beanField = faultBean.getClass().getDeclaredField(f.getName());
          ReflectionUtil.setAccessible(beanField);
          ReflectionUtil.setAccessible(f);
          f.set(e, beanField.get(faultBean));
        } catch (NoSuchFieldException e1) {
          // do nothing
        }
      }
    }
    // also use/try public getter/setter methods
    Method meth[] = faultBean.getClass().getMethods();
    for (Method m : meth) {
      if (m.getParameterTypes().length == 0
          && (m.getName().startsWith("get") || m.getName().startsWith("is"))) {
        try {
          String name;
          if (m.getName().startsWith("get")) {
            name = "set" + m.getName().substring(3);
          } else {
            name = "set" + m.getName().substring(2);
          }
          Method m2 = exClass.getMethod(name, m.getReturnType());
          m2.invoke(e, m.invoke(faultBean));
        } catch (Exception e1) {
          // ignore
        }
      }
    }

    return e;
  }
  /* (non-Javadoc)
   * @see ExtensionHandlerBase#handleFaultExtension(TWSDLParserContextImpl, TWSDLExtensible, org.w3c.dom.Element)
   */
  @Override
  public boolean handleFaultExtension(
      TWSDLParserContext context, TWSDLExtensible parent, Element e) {
    if (XmlUtil.matchesTagNS(e, JAXWSBindingsConstants.JAXWS_BINDINGS)) {
      context.push();
      context.registerNamespaces(e);
      JAXWSBinding jaxwsBinding = new JAXWSBinding(context.getLocation(e));

      for (Iterator iter = XmlUtil.getAllChildren(e); iter.hasNext(); ) {
        Element e2 = Util.nextElement(iter);
        if (e2 == null) {
          break;
        }
        if (XmlUtil.matchesTagNS(e2, JAXWSBindingsConstants.CLASS)) {
          parseClass(context, jaxwsBinding, e2);
          if ((jaxwsBinding.getClassName() != null)
              && (jaxwsBinding.getClassName().getJavaDoc() != null)) {
            ((Fault) parent)
                .setDocumentation(new Documentation(jaxwsBinding.getClassName().getJavaDoc()));
          }
        } else {
          Util.fail("parsing.invalidExtensionElement", e2.getTagName(), e2.getNamespaceURI());
          return false;
        }
      }
      parent.addExtension(jaxwsBinding);
      context.pop();
      //            context.fireDoneParsingEntity(
      //                    JAXWSBindingsConstants.JAXWS_BINDINGS,
      //                    jaxwsBinding);
      return true;
    } else {
      Util.fail("parsing.invalidExtensionElement", e.getTagName(), e.getNamespaceURI());
      return false;
    }
  }
Example #11
0
  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);
    }
  }