|
What this is
Other links
The source code/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package sample.groovy; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyObject; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.axiom.om.util.StAXUtils; import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axiom.soap.SOAPFactory; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; import org.apache.axis2.description.AxisOperation; import org.apache.axis2.description.AxisService; import org.apache.axis2.description.Parameter; import org.apache.axis2.engine.MessageReceiver; import org.apache.axis2.i18n.Messages; import org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; public class GroovyReceiver extends AbstractInOutSyncMessageReceiver implements MessageReceiver { public void invokeBusinessLogic( MessageContext inMessage, MessageContext outMessage) throws AxisFault { try { AxisService service = inMessage .getOperationContext() .getServiceContext() .getAxisService(); Parameter implInfoParam = service.getParameter("GroovyClass"); if (implInfoParam == null) { throw new AxisFault( Messages.getMessage("paramIsNotSpecified", "ServiceClass")); } InputStream groovyFileStream = service.getClassLoader().getResourceAsStream( implInfoParam.getValue().toString()); if (groovyFileStream == null) { throw new AxisFault( Messages.getMessage("groovyUnableToLoad", implInfoParam.getValue().toString())); } //look at the method name. if available this should be a groovy method AxisOperation op = inMessage.getOperationContext().getAxisOperation(); if (op == null) { throw new AxisFault( Messages.getMessage("notFound", "Operation")); } String methodName = op.getName().getLocalPart(); OMElement firstChild = (OMElement) inMessage.getEnvelope().getBody().getFirstOMChild(); inMessage.getEnvelope().build(); StringWriter writer = new StringWriter(); firstChild.build(); firstChild.serialize(writer); writer.flush(); String value = writer.toString(); if (value != null) { GroovyClassLoader loader = new GroovyClassLoader(); Class groovyClass = loader.parseClass(groovyFileStream); GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance(); Object[] arg = {new StringReader(value)}; Object obj = groovyObject.invokeMethod(methodName, arg); if (obj == null) { throw new AxisFault(Messages.getMessage("groovyNoanswer")); } SOAPFactory fac ; if (inMessage.isSOAP11()) { fac = OMAbstractFactory.getSOAP11Factory(); } else { fac = OMAbstractFactory.getSOAP12Factory(); } SOAPEnvelope envelope = fac.getDefaultEnvelope(); OMNamespace ns = fac.createOMNamespace("http://soapenc/", "res"); OMElement responseElement = fac.createOMElement(methodName + "Response", ns); String outMessageString = obj.toString(); // System.out.println("outMessageString = " + outMessageString); // responseElement.setText(outMessageString); responseElement.addChild(getpayLoad(outMessageString)); envelope.getBody().addChild(responseElement); outMessage.setEnvelope(envelope); } } catch (Exception e) { throw AxisFault.makeFault(e); } } private OMElement getpayLoad(String str) throws XMLStreamException { XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader( new ByteArrayInputStream(str.getBytes())); OMFactory fac = OMAbstractFactory.getOMFactory(); StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac, xmlReader); return staxOMBuilder.getDocumentElement(); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.