diff options
Diffstat (limited to 'bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/actions/InvokeWSDLSOAPOperationAction.java')
-rw-r--r-- | bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/actions/InvokeWSDLSOAPOperationAction.java | 284 |
1 files changed, 0 insertions, 284 deletions
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/actions/InvokeWSDLSOAPOperationAction.java b/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/actions/InvokeWSDLSOAPOperationAction.java deleted file mode 100644 index bdca4ed43..000000000 --- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer-src/org/eclipse/wst/ws/internal/explorer/platform/wsdl/actions/InvokeWSDLSOAPOperationAction.java +++ /dev/null @@ -1,284 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.wst.ws.internal.explorer.platform.wsdl.actions; - -import java.io.BufferedReader; -import java.io.IOException; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; -import javax.servlet.http.HttpServletResponse; -import javax.wsdl.BindingInput; -import javax.wsdl.BindingOperation; -import javax.wsdl.Definition; -import javax.wsdl.Part; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.soap.SOAPBody; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import org.apache.axis.Constants; -import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller; -import org.eclipse.wst.ws.internal.explorer.platform.perspective.MessageQueue; -import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataException; -import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataParser; -import org.eclipse.wst.ws.internal.explorer.platform.util.XMLUtils; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.constants.WSDLActionInputs; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.Endpoint; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.WSDLBindingElement; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.WSDLElement; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.WSDLOperationElement; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.WSDLServiceElement; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.fragment.IXSDFragment; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.perspective.InvokeWSDLOperationTool; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.perspective.SOAPMessageQueue; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.perspective.WSDLPerspective; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.transport.HTTPException; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.transport.HTTPTransport; -import org.eclipse.wst.ws.internal.explorer.platform.wsdl.util.SoapHelper; -import org.eclipse.wst.ws.internal.parser.discovery.NetUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -public abstract class InvokeWSDLSOAPOperationAction extends WSDLPropertiesFormAction -{ - public InvokeWSDLSOAPOperationAction(Controller controller) - { - super(controller); - } - - protected boolean processParsedResults(MultipartFormDataParser parser) throws MultipartFormDataException - { - super.processParsedResults(parser); - String endPoint = parser.getParameter(WSDLActionInputs.END_POINT); - InvokeWSDLOperationTool invokeWSDLOperationTool = (InvokeWSDLOperationTool)(getSelectedNavigatorNode().getCurrentToolManager().getSelectedTool()); - invokeWSDLOperationTool.setEndPoint(endPoint); - return true; - } - - protected final void addRPCWrapper(Vector bodyEntries,WSDLElement wsdlElement,WSDLOperationElement operElement,Hashtable soapEnvelopeNamespaceTable) throws ParserConfigurationException - { - // Must be RPC style. - String encodingNamespaceURI = null; - /* - * WS-I: In a rpc-literal SOAP binding, the serialized child element of the - * soap:Body element consists of a wrapper element, whose namespace is the value - * of the namespace attribute of the soapbind:body element and whose local name is - * either the name of the operation or the name of the operation suffixed - * with "Response". The namespace attribute is required, as opposed to being - * optional, to ensure that the children of the soap:Body element are namespace- - * qualified. - */ - BindingOperation bindingOperation = operElement.getBindingOperation(); - if (bindingOperation != null) - { - BindingInput bindingInput = bindingOperation.getBindingInput(); - if (bindingInput != null) - { - List extElements = bindingInput.getExtensibilityElements(); - for (Iterator it = extElements.iterator(); it.hasNext();) - { - ExtensibilityElement extElement = (ExtensibilityElement)it.next(); - if (extElement instanceof SOAPBody) - { - encodingNamespaceURI = ((SOAPBody)extElement).getNamespaceURI(); - break; - } - } - } - } - // If the namespace of the soapbind:body element is not set, get it from the operation element - if (encodingNamespaceURI == null) - encodingNamespaceURI = operElement.getEncodingNamespace(); - // If the namespace of the operation element is not set, get it from the definition element - if (encodingNamespaceURI == null) - { - Definition definition = wsdlElement.getDefinition(); - encodingNamespaceURI = definition.getTargetNamespace(); - } - // Generate an RPC style wrapper element. - Document doc = XMLUtils.createNewDocument(null); - String encodingStyle = (operElement.isUseLiteral() ? null : operElement.getEncodingStyle()); - Element wrapperElement = SoapHelper.createRPCWrapperElement(doc,soapEnvelopeNamespaceTable,encodingNamespaceURI,operElement.getOperation().getName(),encodingStyle); - for (int i=0;i<bodyEntries.size();i++) - wrapperElement.appendChild(doc.importNode((Element)bodyEntries.elementAt(i),true)); - bodyEntries.removeAllElements(); - bodyEntries.addElement(wrapperElement); - } - - /** - * Generate a Vector of the elements inside the Soap Body. - * @param soapEnvelopeNamespaceTable - Hashtable containing a map of the namespace URIs to prefixes. - * @param operElement - WSDLOperationElement encapsulating the WSDL operation. - */ - protected Vector getBodyEntries(Hashtable soapEnvelopeNamespaceTable,WSDLOperationElement operElement,WSDLBindingElement bindingElement,WSDLServiceElement serviceElement) throws ParserConfigurationException,Exception - { - Vector bodyEntries = new Vector(); - boolean isUseLiteral = operElement.isUseLiteral(); - String encodingStyle = operElement.getEncodingStyle(); - boolean addEncodingStyle = (!isUseLiteral && !Constants.URI_SOAP11_ENC.equals(encodingStyle)); - Iterator it = operElement.getOrderedBodyParts().iterator(); - while (it.hasNext()) - { - Part part = (Part)it.next(); - IXSDFragment frag = (IXSDFragment)operElement.getFragment(part); - Element[] instanceDocuments = frag.genInstanceDocumentsFromParameterValues(!isUseLiteral,soapEnvelopeNamespaceTable, XMLUtils.createNewDocument(null)); - for (int j=0;j<instanceDocuments.length;j++) - { - if (instanceDocuments[j] == null) - continue; - if (addEncodingStyle) - instanceDocuments[j].setAttribute("soapenv:encodingStyle",encodingStyle); - bodyEntries.addElement(instanceDocuments[j]); - } - } - - if (!operElement.isDocumentStyle()) - { - try - { - addRPCWrapper(bodyEntries,(WSDLElement)serviceElement.getParentElement(),operElement,soapEnvelopeNamespaceTable); - } - catch (ParserConfigurationException e) - { - throw e; - } - } - return bodyEntries; - } - - protected Element getSOAPEnvelope(Hashtable soapEnvelopeNamespaceTable, Vector bodyEntries) throws ParserConfigurationException - { - DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - Document doc = XMLUtils.createNewDocument(docBuilder); - Element soapEnvelopeElement = SoapHelper.createSoapEnvelopeElement(doc,soapEnvelopeNamespaceTable); - Element soapBodyElement = SoapHelper.createSoapBodyElement(doc); - for (int i=0;i<bodyEntries.size();i++) - soapBodyElement.appendChild(doc.importNode((Element)bodyEntries.elementAt(i),true)); - soapEnvelopeElement.appendChild(soapBodyElement); - return soapEnvelopeElement; - } - - private final void recordSoapRequest(SOAPMessageQueue soapRequestQueue,Hashtable soapEnvelopeNamespaceTable,Element soapEnvelope) throws ParserConfigurationException,IOException - { - soapRequestQueue.clear(); - soapRequestQueue.addMessage(XMLUtils.serialize(soapEnvelope,false)); - } - - private final void recordSOAPResponse(SOAPMessageQueue soapResponseQueue,BufferedReader responseReader) throws IOException - { - soapResponseQueue.clear(); - if (responseReader != null) - { - String line = null; - while ((line = responseReader.readLine()) != null) - soapResponseQueue.addMessage(line); - responseReader.close(); - } - } - - public boolean run() - { - String soapAddressLocation = (String)propertyTable_.get(WSDLActionInputs.END_POINT); - WSDLPerspective wsdlPerspective = controller_.getWSDLPerspective(); - MessageQueue messageQueue = wsdlPerspective.getMessageQueue(); - WSDLOperationElement operElement = (WSDLOperationElement)getSelectedNavigatorNode().getTreeElement(); - WSDLBindingElement bindingElement = (WSDLBindingElement)operElement.getParentElement(); - WSDLServiceElement serviceElement = (WSDLServiceElement)bindingElement.getParentElement(); - operElement.setPropertyAsObject(WSDLActionInputs.SOAP_RESPONSE_CACHED, new Boolean(false)); - try - { - // Generate the SOAP envelope and its children. We need to create a DOM element version to display and the object version to execute. - // <SOAP-ENV:Envelope - // xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" - // xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - // xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - // ... - Hashtable soapEnvelopeNamespaceTable = new Hashtable(); - SoapHelper.addDefaultSoapEnvelopeNamespaces(soapEnvelopeNamespaceTable); - Vector bodyEntries = getBodyEntries(soapEnvelopeNamespaceTable,operElement,bindingElement,serviceElement); - Element soapEnvelope = getSOAPEnvelope(soapEnvelopeNamespaceTable, bodyEntries); - recordSoapRequest(wsdlPerspective.getSOAPRequestQueue(),soapEnvelopeNamespaceTable,soapEnvelope); - - // Execute the SOAP operation. - if (soapAddressLocation != null) - { - // Send the message and record the SOAP Response Envelope. - HTTPTransport transport = createTransport(bindingElement, soapAddressLocation); - transport.send(NetUtils.createURL(soapAddressLocation),operElement.getSoapAction(),XMLUtils.serialize(soapEnvelope, true)); - recordSOAPResponse(wsdlPerspective.getSOAPResponseQueue(),transport.receive()); - wsdlPerspective.setOperationNode(getSelectedNavigatorNode()); - return true; - } - throw new IOException(wsdlPerspective.getMessage("MSG_ERROR_UNABLE_TO_CONNECT",soapAddressLocation)); - } - catch (ParserConfigurationException e) - { - handleUnexpectedException(wsdlPerspective,messageQueue,"ParserConfigurationException",e); - } - catch (IOException e) - { - handleUnexpectedException(wsdlPerspective,messageQueue,"IOException",e); - } - catch (HTTPException httpe) - { - throwHTTPException(bindingElement, soapAddressLocation, httpe); - } - catch (Exception e) - { - handleUnexpectedException(wsdlPerspective,messageQueue,"Exception",e); - } - return false; - } - - private void throwHTTPException(WSDLBindingElement bindingElement, String endpointString, HTTPException httpException) throws HTTPException - { - if (httpException.getStatusCode() == HttpServletResponse.SC_UNAUTHORIZED) - { - Endpoint endpoint = bindingElement.getEndpoint(endpointString); - if (endpoint != null) - { - endpoint.setRequireHTTPBasicAuth(true); - endpoint.setHttpBasicAuthUsername(null); - endpoint.setHttpBasicAuthPassword(null); - } - } - throw httpException; - } - - private HTTPTransport createTransport(WSDLBindingElement bindingElement, String endpointString) - { - HTTPTransport transport = new HTTPTransport(); - Endpoint endpoint = bindingElement.getEndpoint(endpointString); - if (endpoint != null) - { - if (endpoint.isRequireHTTPBasicAuth()) - { - String httpBasicAuthUsername = endpoint.getHttpBasicAuthUsername(); - String httpBasicAuthPassword = endpoint.getHttpBasicAuthPassword(); - if (httpBasicAuthUsername == null || httpBasicAuthPassword == null) - { - httpBasicAuthUsername = (String)propertyTable_.get(WSDLActionInputs.HTTP_BASIC_AUTH_USERNAME); - httpBasicAuthPassword = (String)propertyTable_.get(WSDLActionInputs.HTTP_BASIC_AUTH_PASSWORD); - endpoint.setHttpBasicAuthUsername(httpBasicAuthUsername); - endpoint.setHttpBasicAuthPassword(httpBasicAuthPassword); - } - if (httpBasicAuthUsername != null && httpBasicAuthPassword != null) - { - transport.setHttpBasicAuthUsername(httpBasicAuthUsername); - transport.setHttpBasicAuthPassword(httpBasicAuthPassword); - } - } - } - return transport; - } -}
\ No newline at end of file |