/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
package org.ebayopensource.turmeric.runtime.tests.service1.sample.handlers;
import java.util.Iterator;
import javax.xml.stream.XMLStreamException;
import org.ebayopensource.turmeric.runtime.binding.objectnode.ObjectNode;
import org.ebayopensource.turmeric.runtime.common.exceptions.ErrorDataFactory;
import org.ebayopensource.turmeric.runtime.common.exceptions.ServiceException;
import org.ebayopensource.turmeric.runtime.common.impl.handlers.BaseHandler;
import org.ebayopensource.turmeric.runtime.common.pipeline.InboundMessage;
import org.ebayopensource.turmeric.runtime.common.pipeline.Message;
import org.ebayopensource.turmeric.runtime.common.pipeline.MessageContext;
import org.ebayopensource.turmeric.runtime.common.service.ServiceOperationParamDesc;
import org.ebayopensource.turmeric.runtime.errorlibrary.ErrorConstants;
public class RequestObjectNodeAccessHandler extends BaseHandler {
public static final String H_REQUEST_TEST_OBJECT_NODE = "DoObjectNodeTest";
public static final String H_BODY_1 = "TestHeaderMessageBody1";
public static final String H_REQUEST_MSG_STRING = "TestHeaderReequestMSGString";
public static final String H_REQUEST_BODY_NODE_CLASS_TYPE = "TestHeaderReequestBodyClassType";
public static final String H_REQUEST_BODY_NODE_TYPE_PRE_DESER = "TestHeaderReequestBodyNodeTypePreDeser";
public static final String H_REQUEST_BODY_NODE_TYPE_POST_DESER = "TestHeaderReequestBodyNodeTypePostDeser";
public void invoke(MessageContext ctx) throws ServiceException {
InboundMessage request = (InboundMessage)ctx.getRequestMessage();
// If inbound message is empty skip this test.
if (skipObjectNodeTests(request)) {
return;
}
Message response = ctx.getResponseMessage();
ObjectNode body = request.getMessageBody();
try {
if (null != body) {
response.setTransportHeader(H_REQUEST_BODY_NODE_TYPE_PRE_DESER, body.getNodeType().name());
Iterator<ObjectNode> children = body.getChildrenIterator();
if (null != children) {
while (children.hasNext()) {
ObjectNode msg = children.next();
if (!"MyMessage".equals(msg.getNodeName().getLocalPart())) {
continue;
}
children = msg.getChildrenIterator();
if (null != children) {
while (children.hasNext()) {
ObjectNode msgBody = children.next();
if ("body".equals(msgBody.getNodeName().getLocalPart())) {
response.setTransportHeader(H_BODY_1, msgBody.getNodeValue().toString());
}
}
}
}
}
}
request.getParamCount();
body = request.getMessageBody();
if (null != body) {
response.setTransportHeader(H_REQUEST_BODY_NODE_TYPE_POST_DESER, body.getNodeType().name());
response.setTransportHeader(H_REQUEST_BODY_NODE_CLASS_TYPE, body.getNodeValue().getClass().getSimpleName());
response.setTransportHeader(H_REQUEST_MSG_STRING, body.getNodeValue().toString());
}
} catch (XMLStreamException e) {
throw new ServiceException(ErrorDataFactory.createErrorData(ErrorConstants.SVC_DATA_READ_ERROR, ErrorConstants.ERRORDOMAIN, new Object[] {e.getMessage()}), e);
}
}
private boolean skipObjectNodeTests(InboundMessage msg) {
try {
if (msg.getTransportHeader(H_REQUEST_TEST_OBJECT_NODE) == null) {
return true;
}
ServiceOperationParamDesc opDesc = msg.getParamDesc();
if (opDesc == null ) {
return true;
}
msg.getXMLStreamReader();
return false;
} catch (Exception e) {
return true;
}
}
}