blob: 9b190efdda07677f6aed9660a6a8e2ab4db79542 [file] [log] [blame]
<%
/*******************************************************************************
* Copyright (c) 2001, 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
*******************************************************************************/
%>
<%@ page contentType="text/html; charset=UTF-8" import="org.eclipse.wst.ws.internal.explorer.platform.wsdl.perspective.*,
org.eclipse.wst.ws.internal.explorer.platform.wsdl.datamodel.*,
org.eclipse.wst.ws.internal.explorer.platform.wsdl.fragment.*,
org.eclipse.wst.ws.internal.explorer.platform.wsdl.constants.*,
org.eclipse.wst.ws.internal.explorer.platform.wsdl.util.*,
org.eclipse.wst.ws.internal.explorer.platform.constants.*,
org.eclipse.wst.ws.internal.explorer.platform.util.*,
org.w3c.dom.*,
javax.wsdl.*,
javax.wsdl.extensions.ExtensibilityElement,
javax.wsdl.extensions.soap.SOAPBody,
java.util.*" %>
<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"/>
<%
WSDLPerspective wsdlPerspective = controller.getWSDLPerspective();
WSDLOperationElement operElement = (WSDLOperationElement)(wsdlPerspective.getNodeManager().getSelectedNode().getTreeElement());
Operation oper = operElement.getOperation();
Iterator it = operElement.getOrderedBodyParts().iterator();
StringBuffer sourceContent = new StringBuffer();
String cachedSourceContent = operElement.getPropertyAsString(WSDLModelConstants.PROP_SOURCE_CONTENT);
Hashtable soapEnvelopeNamespaceTable = new Hashtable();
SoapHelper.addDefaultSoapEnvelopeNamespaces(soapEnvelopeNamespaceTable);
if (cachedSourceContent != null)
{
sourceContent.append(cachedSourceContent);
String[] nsDeclarations = (String[])operElement.getPropertyAsObject(WSDLModelConstants.PROP_SOURCE_CONTENT_NAMESPACE);
if (nsDeclarations != null)
{
for (int i = 0; i < nsDeclarations.length; i++)
{
String[] prefix_ns = SoapHelper.decodeNamespaceDeclaration(nsDeclarations[i]);
if (!soapEnvelopeNamespaceTable.contains(prefix_ns[1]))
soapEnvelopeNamespaceTable.put(prefix_ns[1], prefix_ns[0]);
}
}
}
else
{
while (it.hasNext())
{
Part part = (Part)it.next();
IXSDFragment frag = operElement.getFragment(part);
Element[] instanceDocuments = frag.genInstanceDocumentsFromParameterValues(!operElement.isUseLiteral(), soapEnvelopeNamespaceTable, XMLUtils.createNewDocument(null));
for (int i = 0; i < instanceDocuments.length; i++)
{
sourceContent.append(XMLUtils.serialize(instanceDocuments[i], true));
sourceContent.append(HTMLUtils.LINE_SEPARATOR);
}
}
}
Enumeration enum = soapEnvelopeNamespaceTable.keys();
while (enum.hasMoreElements())
{
String uri = (String)enum.nextElement();
String prefix = (String)soapEnvelopeNamespaceTable.get(uri);
String value = SoapHelper.encodeNamespaceDeclaration(prefix, uri);
%>
<input type="hidden" name="<%=FragmentConstants.SOURCE_CONTENT_NAMESPACE%>" value="<%=value%>">
<%
}
%>
<table width="95%" border=0 cellpadding=0 cellspacing=0>
<tr>
<td height=30 valign="bottom" class="labels">
<%
Document doc = XMLUtils.createNewDocument(null);
Element soapEnvelopeElement = SoapHelper.createSoapEnvelopeElement(doc,soapEnvelopeNamespaceTable);
StringBuffer header = new StringBuffer("<");
header.append(soapEnvelopeElement.getTagName());
NamedNodeMap attributes = soapEnvelopeElement.getAttributes();
int numberOfAttributes = attributes.getLength();
if (numberOfAttributes == 0)
header.append('>');
%>
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>
<%
for (int i=0;i<numberOfAttributes;i++)
{
header.setLength(0);
Node attrNode = attributes.item(i);
header.append(attrNode.getNodeName()).append("=\"").append(attrNode.getNodeValue()).append('\"');
if (i == numberOfAttributes-1)
header.append('>');
%>
<table width="95%" border=0 cellpadding=0 cellspacing=0>
<tr>
<td width=8>
<img width=8 height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td valign="bottom" class="labels">
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>
<%
}
Element soapBodyElement = SoapHelper.createSoapBodyElement(doc);
header.setLength(0);
header.append('<').append(soapBodyElement.getTagName());
attributes = soapBodyElement.getAttributes();
numberOfAttributes = attributes.getLength();
if (numberOfAttributes == 0)
header.append('>');
%>
<table width="95%" border=0 cellpadding=0 cellspacing=0>
<tr>
<td width=8>
<img width=8 height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td valign="bottom" class="labels">
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>
<%
for (int i=0;i<numberOfAttributes;i++)
{
header.setLength(0);
Node attrNode = attributes.item(i);
header.append(attrNode.getNodeName()).append("=\"").append(attrNode.getNodeValue()).append('\"');
if (i == numberOfAttributes-1)
header.append('>');
%>
<table width="95%" border=0 cellpadding=0 cellspacing=0>
<tr>
<td width=16>
<img width=16 height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td valign="bottom" class="labels">
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>
<table
<%
}
Element wrapperElement = null;
if (!operElement.isDocumentStyle())
{
// 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 extElementsIt = extElements.iterator(); extElementsIt.hasNext();)
{
ExtensibilityElement extElement = (ExtensibilityElement)extElementsIt.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)
{
WSDLBindingElement bindingElement = (WSDLBindingElement)operElement.getParentElement();
WSDLServiceElement serviceElement = (WSDLServiceElement)bindingElement.getParentElement();
WSDLElement wsdlElement = (WSDLElement)serviceElement.getParentElement();
Definition definition = wsdlElement.getDefinition();
encodingNamespaceURI = definition.getTargetNamespace();
}
// Generate an RPC style wrapper element.
String encodingStyle = (operElement.isUseLiteral() ? null : operElement.getEncodingStyle());
wrapperElement = SoapHelper.createRPCWrapperElement(doc,soapEnvelopeNamespaceTable,encodingNamespaceURI,oper.getName(),encodingStyle);
header.setLength(0);
header.append('<').append(wrapperElement.getTagName());
attributes = wrapperElement.getAttributes();
numberOfAttributes = attributes.getLength();
if (numberOfAttributes == 0)
header.append('>');
%>
<table width="95%" border=0 cellpadding=0 cellspacing=0>
<tr>
<td width=16>
<img width=16 height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td valign="bottom" class="labels">
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>
<%
for (int i=0;i<numberOfAttributes;i++)
{
header.setLength(0);
Node attrNode = attributes.item(i);
header.append(attrNode.getNodeName()).append("=\"").append(attrNode.getNodeValue()).append('\"');
if (i == numberOfAttributes-1)
header.append('>');
%>
<table width="95%" border=0 cellpadding=0 cellspacing=0>
<tr>
<td width=24>
<img width=24 height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td valign="bottom" class="labels">
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>
<%
}
}
int sourceContentIndentationImageWidth = 16;
if (wrapperElement != null)
sourceContentIndentationImageWidth += 8;
%>
<table border=0 cellpadding=3 cellspacing=3>
<tr>
<td width=<%=sourceContentIndentationImageWidth%>>
<img width=<%=sourceContentIndentationImageWidth%> height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td valign="center" align="left" nowrap>
<input type="file" name="<%=WSDLActionInputs.SELECTED_FILE%>" title="<%=wsdlPerspective.getMessage("FORM_CONTROL_TITLE_SOAP_FILE")%>">
</td>
<td valign="center" align="left" class="labels" nowrap>
<a href="javascript:showNewFileContents()"><%=wsdlPerspective.getMessage("BUTTON_LABEL_LOAD")%></a>
</td>
<td valign="center" align="left" class="labels" nowrap>
<a href="javascript:saveSourceContent()"><%=wsdlPerspective.getMessage("BUTTON_LABEL_SAVE_AS")%></a>
</td>
</tr>
</table>
<table width="95%" border=0 cellpadding=3 cellspacing=3>
<tr>
<td width=<%=sourceContentIndentationImageWidth%>>
<img width=<%=sourceContentIndentationImageWidth%> height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td width="100%">
<textarea id="soap_body_content" name="<%=FragmentConstants.SOURCE_CONTENT%>" class="bigtextareaenter"><%=sourceContent.toString()%></textarea>
</td>
</tr>
</table>
<%
if (wrapperElement != null)
{
header.setLength(0);
header.append("</").append(wrapperElement.getTagName()).append('>');
%>
<table width="95%" border=0 cellpadding=0 cellspacing=0>
<tr>
<td width=16>
<img width=16 height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td valign="bottom" class="labels">
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>
<%
}
header.setLength(0);
header.append("</").append(soapBodyElement.getTagName()).append('>');
%>
<table width="95%" cellpadding=1 cellspacing=0>
<tr>
<td width=8>
<img width=8 height=16 src="<%=response.encodeURL(controller.getPathWithContext("images/space.gif"))%>">
</td>
<td valign="bottom" class="labels">
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>
<%
header.setLength(0);
header.append("</").append(soapEnvelopeElement.getTagName()).append('>');
%>
<table width="95%" cellpadding=1 cellspacing=0>
<tr>
<td valign="bottom" class="labels">
<%=HTMLUtils.charactersToHTMLEntities(header.toString())%>
</td>
</tr>
</table>