Package test.wsdl.extensibility

Source Code of test.wsdl.extensibility.ObjectSerializer

/**
* ExtensibilityQueryBindingImpl.java
*
*/

package test.wsdl.extensibility;

import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.client.Call;
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.encoding.DeserializationContext;
import org.apache.axis.encoding.DeserializationContextImpl;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.encoding.SerializationContextImpl;
import org.apache.axis.message.MessageElement;
import org.apache.axis.message.RPCElement;
import org.apache.axis.message.RPCParam;
import org.apache.axis.message.SOAPBodyElement;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.utils.XMLUtils;
import org.apache.commons.logging.Log;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;

import javax.xml.namespace.QName;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Vector;


public class ExtensibilityQueryBindingImpl implements ExtensibilityQueryPortType {
    private final static String[] books = new String[] { "The Grid", "The Oxford Dictionary" };
    private final static String[] subjects = new String[] { "Computer Science", "English" };

    public ExtensibilityType query(ExtensibilityType query) throws RemoteException {
        ExtensibilityType result = new ExtensibilityType();
        Object obj = query.get_any()[0].getObjectValue();
        if (obj instanceof _FindBooksQueryExpressionElement) {
            BookType bookQuery = ((_FindBooksQueryExpressionElement)obj).getBookQuery();
            String subject = bookQuery.getSubject();
            if (!"all".equals(subject)) {
                throw new RemoteException("ExtensibilityQueryBindingImpl: Book subject query should be all, instead was " + subject);
            }
            _QueryResultElement resultElement = new _QueryResultElement();
            ResultListType resultList = new ResultListType();
            resultElement.setResultList(resultList);
            QueryResultType[] queryResult = new QueryResultType[books.length];
            for (int i = 0; i < books.length; i++) {
                queryResult[i] = new QueryResultType();
                queryResult[i].setName(subjects[i]);
                queryResult[i].setValue(books[i]);
                queryResult[i].setTime(Calendar.getInstance());
                queryResult[i].setQueryType(new QName("urn:QueryType","BookQuery"));
            }
            resultList.setResult(queryResult);
            MessageElement me = new MessageElement("foo", "bar", resultElement);
            result.set_any(new MessageElement [] { me });
        } else {
            throw new RemoteException("Failed to get FindBooksQueryExpressionElement. Got: " + obj.getClass().getName() + ":" + obj.toString());
        }
        return result;
    }
}

class ObjectSerializer {
    static Log logger =
           LogFactory.getLog(ObjectSerializer.class.getName());

    static Object toObject(Element element) throws Exception {
       MessageContext currentContext = MessageContext.getCurrentContext();
       MessageContext messageContext = new MessageContext(currentContext.getAxisEngine());
       messageContext.setTypeMappingRegistry(currentContext.getTypeMappingRegistry());
       messageContext.setEncodingStyle("");
       messageContext.setProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
       SOAPEnvelope message = new SOAPEnvelope();
       Document doc = XMLUtils.newDocument();
       Element operationWrapper = doc.createElementNS("urn:operationNS","operation");
       doc.appendChild(operationWrapper);
       Node node = doc.importNode(element,true);
       operationWrapper.appendChild(node);

       message.addBodyElement(new SOAPBodyElement(operationWrapper));
      
       StringWriter stringWriter = new StringWriter();
       SerializationContext context = new SerializationContextImpl(stringWriter, messageContext);
       context.setDoMultiRefs(false);
       message.output(context);
       stringWriter.close();
       String messageString = stringWriter.getBuffer().toString();
       logger.debug(messageString);
       Reader reader = new StringReader(messageString);
       DeserializationContext deserializer = new DeserializationContextImpl(new InputSource(reader),
                                                                           messageContext,
                                                                           Message.REQUEST);
       deserializer.parse();
       SOAPEnvelope env = deserializer.getEnvelope();
      
       RPCElement rpcElem = (RPCElement)env.getFirstBody();
       Vector parameters = rpcElem.getParams();
       RPCParam param = (RPCParam) parameters.get(0);
       return param.getValue();
    }
}
TOP

Related Classes of test.wsdl.extensibility.ObjectSerializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.