Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcbrealey2007-05-09 21:11:47 +0000
committercbrealey2007-05-09 21:11:47 +0000
commit864f03255b5da93cb091e73b003af62ac5513767 (patch)
treef61da3f17d91576284268a5f14912c3d28b4c5b5 /bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl/forms/ReadOnlyFragmentsFormView.jsp
parentb8e927f451358d9913d742ead4c74e0c78974a64 (diff)
downloadwebtools.webservices-864f03255b5da93cb091e73b003af62ac5513767.tar.gz
webtools.webservices-864f03255b5da93cb091e73b003af62ac5513767.tar.xz
webtools.webservices-864f03255b5da93cb091e73b003af62ac5513767.zip
[176493] WSE: Make message/transport stack pluggable
Diffstat (limited to 'bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl/forms/ReadOnlyFragmentsFormView.jsp')
-rw-r--r--bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl/forms/ReadOnlyFragmentsFormView.jsp202
1 files changed, 45 insertions, 157 deletions
diff --git a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl/forms/ReadOnlyFragmentsFormView.jsp b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl/forms/ReadOnlyFragmentsFormView.jsp
index 88a31d086..4be200bab 100644
--- a/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl/forms/ReadOnlyFragmentsFormView.jsp
+++ b/bundles/org.eclipse.wst.ws.explorer/wsexplorer/wsdl/forms/ReadOnlyFragmentsFormView.jsp
@@ -11,6 +11,7 @@
* yyyymmdd bug Email and other contact information
* -------- -------- -----------------------------------------------------------
* 20070305 117034 makandre@ca.ibm.com - Andrew Mak, Web Services Explorer should support SOAP Headers
+ * 20070413 176493 makandre@ca.ibm.com - Andrew Mak, WSE: Make message/transport stack pluggable
*******************************************************************************/
%>
<%@ page contentType="text/html; charset=UTF-8" import="org.eclipse.wst.ws.internal.explorer.platform.wsdl.perspective.*,
@@ -19,10 +20,12 @@
org.eclipse.wst.ws.internal.explorer.platform.wsdl.xsd.*,
org.eclipse.wst.ws.internal.explorer.platform.wsdl.fragment.*,
org.eclipse.wst.ws.internal.explorer.platform.wsdl.fragment.impl.*,
+ org.eclipse.wst.ws.internal.explorer.platform.wsdl.util.*,
org.eclipse.wst.ws.internal.explorer.platform.constants.*,
org.eclipse.wst.ws.internal.explorer.platform.perspective.Node,
org.eclipse.wst.ws.internal.explorer.platform.perspective.*,
org.eclipse.wst.ws.internal.explorer.platform.util.*,
+ org.eclipse.wst.ws.internal.explorer.transport.*,
org.eclipse.wst.wsdl.binding.soap.SOAPHeader,
org.w3c.dom.*,
javax.wsdl.*,
@@ -32,136 +35,6 @@
<jsp:useBean id="controller" class="org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller" scope="session"/>
<jsp:useBean id="fragID" class="java.lang.StringBuffer" scope="request"/>
<jsp:useBean id="nodeID" class="java.lang.StringBuffer" scope="request"/>
-
-<%!
-private Element soapResponse_ = null;
-private boolean hasSOAPHeaders = false;
-
-private void checkSOAPHeaders() {
-
- NodeList nl = soapResponse_.getElementsByTagNameNS(FragmentConstants.URI_SOAP_ENV, FragmentConstants.QNAME_LOCAL_NAME_HEADER);
- if (nl.getLength() == 0)
- return;
-
- Element soapHeader = (Element) nl.item(0);
- NodeList nodes = soapHeader.getChildNodes();
-
- for (int i = 0; i < nodes.getLength(); i++) {
- if (nodes.item(i) instanceof Element) {
- hasSOAPHeaders = true;
- return;
- }
- }
-}
-
-private Element[] parseSOAPResponse(SOAPMessageQueue soapMessageQueue, WSDLOperationElement operElement)
-{
- String messages = soapMessageQueue.getMessagesFromList();
- try
- {
- soapResponse_ = XMLUtils.stringToElement(messages, true);
- checkSOAPHeaders();
- NodeList nl = soapResponse_.getElementsByTagNameNS(FragmentConstants.URI_SOAP_ENV, FragmentConstants.QNAME_LOCAL_NAME_BODY);
- if (nl.getLength() > 0)
- {
- Element soapBody = (Element)nl.item(0);
- NodeList soapFault = soapBody.getElementsByTagNameNS(FragmentConstants.URI_SOAP_ENV, FragmentConstants.QNAME_LOCAL_NAME_FAULT);
- if (soapFault.getLength() > 0)
- return new Element[0];
- NodeList instanceList;
- if (operElement.isDocumentStyle())
- instanceList = soapBody.getChildNodes();
- else
- {
- NodeList rpcWrapper = soapBody.getElementsByTagNameNS("*", operElement.getOperation().getOutput().getMessage().getQName().getLocalPart());
-
- /*
- * HACK - Some of the web services out on the internet do not
- * set their RPC wrapper properly. It should be set to the output
- * message name of the selected operation. The hack is to
- * assume the first element inside the body element is the
- * RPC wrapper.
- */
- if (rpcWrapper.getLength() <= 0)
- rpcWrapper = soapBody.getElementsByTagNameNS("*", "*");
-
- if (rpcWrapper.getLength() > 0)
- instanceList = rpcWrapper.item(0).getChildNodes();
- else
- return null;
- }
- return fixSOAPResponse(instanceList, operElement);
- }
- }
- catch (Throwable t) {
- t.printStackTrace();
- }
- return null;
-}
-
-/*
-* HACK - The root element tag name of the instance document
-* is ambiguous. It lands on a very grey area between the SOAP
-* spec and the WSDL spec. The two specs do not explicitly define
-* that the root element tag name must match the name of the
-* WSDL part. The hack is to treat elements with different tag names
-* as instances of the WSDL part.
-*/
-private Element[] fixSOAPResponse(NodeList instanceList, WSDLOperationElement operElement)
-{
- Vector instanceVector = new Vector();
- for (int i = 0; i < instanceList.getLength(); i++)
- {
- Object object = instanceList.item(i);
- if (object != null && (object instanceof Element))
- instanceVector.add(object);
- }
- Element[] instanceDocuments = new Element[instanceVector.size()];
- Operation oper = operElement.getOperation();
- Map partsMap = oper.getOutput().getMessage().getParts();
- if (partsMap.size() == 1)
- {
- Iterator it = partsMap.values().iterator();
- IXSDFragment frag = operElement.getFragment((Part)it.next(), false);
- for (int i = 0; i < instanceVector.size(); i++)
- {
- Element element = (Element)instanceVector.get(i);
- if (!element.getTagName().equals(frag.getName()))
- {
- Document doc = element.getOwnerDocument();
- NodeList children = element.getChildNodes();
- NamedNodeMap attributes = element.getAttributes();
- element = doc.createElement(frag.getName());
- for (int j = 0; j < children.getLength(); j++)
- {
- if (children.item(j) != null)
- {
- element.appendChild(children.item(j));
- // When you append a node from one element to another,
- // the original element will lose its reference to this node,
- // therefore, the size of the node list will decrease by 1.
- j--;
- }
- }
- for (int j = 0; j < attributes.getLength(); j++)
- {
- Object attr = attributes.item(j);
- if (attr != null && (attr instanceof Attr))
- {
- Attr attribute = (Attr)attr;
- element.setAttribute(attribute.getName(), attribute.getValue());
- }
- }
- }
- instanceDocuments[i] = element;
- }
- }
- else
- instanceVector.copyInto(instanceDocuments);
- return instanceDocuments;
-}
-%>
-
<%
WSDLPerspective wsdlPerspective = controller.getWSDLPerspective();
wsdlPerspective.setStatusContentType(WSDLPerspective.STATUS_CONTENT_RESULT_FORM);
@@ -184,14 +57,13 @@ if (oper.getOutput() == null)
}
else
{
+ ISOAPMessage soapMessage = (ISOAPMessage) operElement.getPropertyAsObject(WSDLModelConstants.PROP_SOAP_RESPONSE);
+ Element[] headerContent = soapMessage.getHeaderContent();;
+ Element[] bodyContent = soapMessage.getBodyContent();
+
boolean cached = ((Boolean)operElement.getPropertyAsObject(WSDLActionInputs.SOAP_RESPONSE_CACHED)).booleanValue();
- Element[] instanceDocuments = null;
- if (!cached)
- {
- SOAPMessageQueue soapMessageQueue = wsdlPerspective.getSOAPResponseQueue();
- instanceDocuments = parseSOAPResponse(soapMessageQueue, operElement);
- }
- if (!cached && !hasSOAPHeaders && instanceDocuments == null)
+
+ if (soapMessage.getBody(false) == null) // body is mandatory
{
%>
<table width="95%" border=0 cellpadding=6 cellspacing=0>
@@ -203,7 +75,8 @@ else
</table>
<%
}
- else if (!cached && !hasSOAPHeaders && instanceDocuments.length <= 0)
+ else if ((headerContent == null || headerContent.length == 0) &&
+ (soapMessage.getFault() != null || bodyContent == null || bodyContent.length == 0))
{
%>
<table width="95%" border=0 cellpadding=6 cellspacing=0>
@@ -237,31 +110,40 @@ else
<div id="<%=headerDivId%>" class="fragarea">
<%
- if (cached || hasSOAPHeaders) {
- hasSOAPHeaders = false;
+ boolean hasSOAPHeaders = false;
+ if (headerContent != null && headerContent.length > 0) {
+
Iterator it = operElement.getSOAPHeaders(false).iterator();
- while (it.hasNext()) {
- SOAPHeader soapHeader = (SOAPHeader) it.next();
- String ns = soapHeader.getEPart().getElementDeclaration().getTargetNamespace();
- IXSDFragment frag = operElement.getHeaderFragment(soapHeader, false);
+ int start = 0;
+ while (it.hasNext() && start < headerContent.length) {
+ SOAPHeader soapHeader = (SOAPHeader) it.next();
+ IXSDFragment fragment = operElement.getHeaderFragment(soapHeader, false);
- if (!cached) {
- NodeList nl = soapResponse_.getElementsByTagNameNS(ns, frag.getName());
- if (nl.getLength() == 0)
+ if (!cached) {
+ int pos = SOAPMessageUtils.findFirstMatchingElement(
+ soapHeader.getEPart(),
+ headerContent,
+ soapMessage.getNamespaceTable(),
+ fragment.getName(),
+ start);
+
+ if (pos == -1)
continue;
- Element element = (Element) nl.item(0);
- if (!frag.setParameterValuesFromInstanceDocuments(new Element[] { element }))
+ Element element = headerContent[pos];
+ start = pos + 1;
+
+ if (!fragment.setParameterValuesFromInstanceDocuments(new Element[] { element }))
continue;
}
- else if (!frag.validateAllParameterValues())
+ else if (!fragment.validateAllParameterValues())
continue;
hasSOAPHeaders = true;
fragID.delete(0, fragID.length());
- fragID.append(frag.getID());
+ fragID.append(fragment.getID());
%>
- <jsp:include page="<%=frag.getReadFragment()%>" flush="true"/>
+ <jsp:include page="<%=fragment.getReadFragment()%>" flush="true"/>
<%
}
}
@@ -294,8 +176,9 @@ else
<div id="<%=bodyDivId%>" class="fragarea">
<%
- if (cached || (instanceDocuments != null && instanceDocuments.length > 0)) {
-
+ boolean hasSOAPBody = false;
+ if (bodyContent != null && bodyContent.length > 0) {
+
Map partsMap = oper.getOutput().getMessage().getParts();
Iterator it = partsMap.values().iterator();
Hashtable uriReferences = null;
@@ -307,11 +190,16 @@ else
if (!operElement.isUseLiteral() && (fragment instanceof ISOAPEncodingWrapperFragment))
{
if (uriReferences == null)
- uriReferences = SOAPEncodingWrapperFragment.parseURIReferences(soapResponse_, true);
+ uriReferences = SOAPEncodingWrapperFragment.parseURIReferences(soapMessage.getEnvelope(true), true);
((ISOAPEncodingWrapperFragment)fragment).setURIReferences(uriReferences);
}
- fragment.setParameterValuesFromInstanceDocuments(instanceDocuments);
+ if (!fragment.setParameterValuesFromInstanceDocuments(bodyContent))
+ continue;
}
+ else if (!fragment.validateAllParameterValues())
+ continue;
+
+ hasSOAPBody = true;
fragID.delete(0, fragID.length());
fragID.append(fragment.getID());
%>
@@ -320,7 +208,7 @@ else
}
operElement.setPropertyAsObject(WSDLActionInputs.SOAP_RESPONSE_CACHED, new Boolean(true));
}
- else {
+ if (!hasSOAPBody) {
%>
<table width="95%" border=0 cellpadding=6 cellspacing=0>
<tr>

Back to the top