| /* |
| * Copyright 2001-2004 The Apache Software Foundation. |
| * |
| * 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 |
| * |
| * 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 org.apache.ws.scout.transport; |
| |
| import java.io.ByteArrayInputStream; |
| import java.net.URI; |
| import java.util.Vector; |
| |
| import org.apache.axis.AxisFault; |
| import org.apache.axis.Message; |
| import org.apache.axis.client.Call; |
| import org.apache.axis.client.Service; |
| import org.apache.axis.message.SOAPBodyElement; |
| import org.apache.axis.utils.XMLUtils; |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.w3c.dom.Element; |
| |
| /** |
| * Message transport class. |
| * |
| * <p><i>Borrowed from jUDDI project.</i></p> |
| * |
| * @author Steve Viens (sviens@apache.org) |
| */ |
| public class AxisTransport implements Transport |
| { |
| // private reference to the jUDDI logger |
| private static Log log = LogFactory.getLog(AxisTransport.class); |
| |
| public Element send(Element request,URI endpointURL) |
| throws TransportException |
| { |
| Service service = null; |
| Call call = null; |
| Element response = null; |
| |
| if (log.isDebugEnabled()) { |
| log.debug("\nRequest message:\n" + XMLUtils.ElementToString(request)); |
| log.debug(endpointURL.toString()); |
| } |
| |
| try { |
| service = new Service(); |
| call = (Call)service.createCall(); |
| call.setTargetEndpointAddress(endpointURL.toURL()); |
| |
| String requestString = XMLUtils.ElementToString(request); |
| SOAPBodyElement body = new SOAPBodyElement(new ByteArrayInputStream(requestString.getBytes("UTF-8"))); |
| Object[] soapBodies = new Object[] { body }; |
| |
| Vector result = (Vector)call.invoke(soapBodies); |
| response = ((SOAPBodyElement)result.elementAt(0)).getAsDOM(); |
| } |
| catch (AxisFault fault) { |
| |
| try { |
| Message msg = call.getResponseMessage(); |
| response = msg.getSOAPEnvelope().getFirstBody().getAsDOM(); |
| } |
| catch (Exception ex) { |
| throw new TransportException(ex); |
| } |
| } |
| catch (Exception ex) { |
| throw new TransportException(ex); |
| } |
| |
| if (log.isDebugEnabled()) { |
| log.debug("\nResponse message:\n" + XMLUtils.ElementToString(response)); |
| } |
| |
| |
| return response; |
| } |
| |
| public String send(String request,URI endpointURL) |
| throws TransportException |
| { |
| Service service = null; |
| Call call = null; |
| String response = null; |
| |
| log.debug("\nRequest message:\n" + request); |
| |
| try { |
| |
| service = new Service(); |
| call = (Call)service.createCall(); |
| call.setTargetEndpointAddress(endpointURL.toURL()); |
| |
| SOAPBodyElement body = new SOAPBodyElement(new ByteArrayInputStream(request.getBytes("UTF-8"))); |
| Object[] soapBodies = new Object[] { body }; |
| |
| Vector result = (Vector)call.invoke(soapBodies); |
| response = ((SOAPBodyElement)result.elementAt(0)).getAsString(); |
| } |
| catch (AxisFault fault) { |
| |
| try { |
| Message msg = call.getResponseMessage(); |
| response = msg.getSOAPEnvelope().getFirstBody().getAsString(); |
| } |
| catch (Exception ex) { |
| throw new TransportException(ex); |
| } |
| } |
| catch (Exception ex) { |
| throw new TransportException(ex); |
| } |
| |
| log.debug("\nResponse message:\n" + response); |
| |
| return response; |
| } |
| } |