public Message invoke(Message msg) { Message ret = next.invoke(msg); if (ret.isFault() && expected.equals(ret.getBody().getClass())) { ret.setBody(null); } return ret; }
public Object invoke(Method method, Object[] args) throws Throwable { InvocationChain invocationChain = chains.get(method.getName()); if (invocationChain == null) { throw new ServiceRuntimeException("Unknown resource method: " + method.toString()); } WorkContext context = WorkContextCache.getThreadWorkContext(); // work context set previously in RsContainer Message message = MessageCache.getAndResetMessage(); try { if (authenticate) { authenticate(context); } message.setWorkContext(context); message.setBody(args); if (invocationChain != null) { Interceptor headInterceptor = invocationChain.getHeadInterceptor(); Message ret = headInterceptor.invoke(message); if (ret.isFault()) { return handleFault(ret); } else { return ret.getBody(); } } else { return null; } } catch (RuntimeException e) { throw new InvocationTargetException(e); } finally { message.reset(); } }
private Message transformOutput(Message ret) { // FIXME For exception transformation, if it is checked convert as application fault Object body = ret.getBody(); // TODO handle null types if (body != null) { try { Object transformed = outTransformer.transform(body, outLoader); if (ret.isFault()) { ret.setBodyWithFault(transformed); } else { ret.setBody(transformed); } } catch (ClassCastException e) { // an unexpected type was returned by the target service or an interceptor later in the chain. This is an error in the extension or // interceptor and not user code since errors should be trapped and returned in the format expected by the transformer if (body instanceof Throwable) { throw new ServiceRuntimeException("Unexpected exception returned", (Throwable) body); } else { throw new ServiceRuntimeException("Unexpected type returned: " + body.getClass()); } } catch (TransformationException e) { throw new ServiceRuntimeException(e); } } return ret; }
SOAPBody body = envelope.getBody(); if (ret.isFault()) { Object element = ret.getBody(); if (element instanceof AxisFault) {
private Message interceptService(Message message) { Object[] payload = (Object[]) message.getBody(); if (payload != null && payload.length > 0) { OMElement omElement = (OMElement) payload[0]; Object jaxbObject = inTransformer.transform(omElement, null); message.setBody(new Object[]{jaxbObject}); } Message response = next.invoke(message); Object result; if (response.isFault()) { Object webFault = response.getBody(); result = getFault(webFault); } else { result = response.getBody(); } if (result != null) { OMElement omElement = outTransformer.transform(result, null); response.setBody(omElement); } return response; }
public void run() { WorkContext workContext = WorkContextCache.getAndResetThreadWorkContext(); workContext.addCallbackReferences(stack); workContext.addHeaders(headers); workContext.setSubject(subject); Message message = MessageCache.getAndResetMessage(); message.setBody(payload); message.setWorkContext(workContext); Message response = next.invoke(message); if (response.isFault()) { // log the exception monitor.onError((Throwable) response.getBody()); } message.reset(); workContext.reset(); }
public boolean onUpload(String fileName, String contentType, InputStream uploadData) throws Exception { Object[] args = new Object[]{fileName, uploadData}; WorkContext workContext = WorkContextCache.getAndResetThreadWorkContext(); Message input = MessageCache.getAndResetMessage(); try { // set the header value for the request context workContext.setHeader(FtpConstants.HEADER_CONTENT_TYPE, contentType); input.setWorkContext(workContext); input.setBody(args); Message response = getInterceptor().invoke(input); if (response.isFault()) { monitor.fileProcessingError(servicePath, (Throwable) response.getBody()); input.reset(); return false; } return true; } finally { input.reset(); workContext.reset(); } }