/*******************************************************************************
* Copyright (c) 2009 MATERNA Information & Communications. 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. For further
* project-related information visit http://www.ws4d.org. The most recent
* version of the JMEDS framework can be obtained from
* http://sourceforge.net/projects/ws4d-javame.
******************************************************************************/
package org.ws4d.java.wsdl.soap12;
import org.ws4d.java.constants.WSDLConstants;
import org.ws4d.java.io.xml.ElementParser;
import org.ws4d.java.types.QName;
import org.ws4d.java.types.URI;
import org.ws4d.java.wsdl.UnsupportedBindingException;
import org.ws4d.java.wsdl.WSDLBinding;
import org.ws4d.java.wsdl.WSDLBindingBuilder;
import org.ws4d.java.wsdl.WSDLPort;
/**
*
*/
public class SOAP12DocumentLiteralHTTPBindingBuilder implements WSDLBindingBuilder {
private SOAP12DocumentLiteralHTTPBinding binding;
/**
*
*/
public SOAP12DocumentLiteralHTTPBindingBuilder() {
super();
}
/*
* (non-Javadoc)
* @see org.ws4d.java.wsdl.WSDLBindingBuilder#getNamespace()
*/
public String getNamespace() {
return WSDLConstants.SOAP12_BINDING_NAMESPACE_NAME;
}
/*
* (non-Javadoc)
* @see org.ws4d.java.wsdl.WSDLBindingBuilder#getBinding()
*/
public WSDLBinding getBinding() {
return binding;
}
/*
* (non-Javadoc)
* @see org.ws4d.java.wsdl.WSDLBindingBuilder#parseBindingExtension(org.ws4d
* .java.data.QName, org.ws4d.java.data.QName,
* org.ws4d.java.communication.protocol.soap.generator.ElementParser)
*/
public void parseBindingExtension(QName bindingName, QName portType, ElementParser parser) throws UnsupportedBindingException {
String style = SOAP12DocumentLiteralHTTPBinding.DOCUMENT_STYLE;
String transport = null;
int attributeCount = parser.getAttributeCount();
for (int i = 0; i < attributeCount; i++) {
String attributeNamespace = parser.getAttributeNamespace(i);
String attributeName = parser.getAttributeName(i);
if ("".equals(attributeNamespace)) {
if (WSDLConstants.WSDL_ATTRIB_STYLE.equals(attributeName)) {
style = parser.getAttributeValue(i);
} else if (WSDLConstants.WSDL_ATTRIB_TRANSPORT.equals(attributeName)) {
transport = parser.getAttributeValue(i);
}
}
}
if (!SOAP12DocumentLiteralHTTPBinding.DOCUMENT_STYLE.equals(style)) {
throw new UnsupportedBindingException("unsupported style: " + style);
}
if (!SOAP12DocumentLiteralHTTPBinding.HTTP_TRANSPORT.equals(transport)) {
throw new UnsupportedBindingException("unsupported transport: " + transport);
}
binding = new SOAP12DocumentLiteralHTTPBinding(bindingName, portType);
}
/*
* (non-Javadoc)
* @see org.ws4d.java.wsdl.WSDLBindingBuilder#parseOperationExtension(java
* .lang.String, org.ws4d.java.io.xml.ElementParser)
*/
public void parseOperationExtension(String operationName, ElementParser parser) throws UnsupportedBindingException {
if (binding == null) {
throw new UnsupportedBindingException("no acceptable binding extension processed");
}
String style = SOAP12DocumentLiteralHTTPBinding.DOCUMENT_STYLE;
String soapAction = null;
int attributeCount = parser.getAttributeCount();
for (int i = 0; i < attributeCount; i++) {
String attributeNamespace = parser.getAttributeNamespace(i);
String attributeName = parser.getAttributeName(i);
if ("".equals(attributeNamespace)) {
if (WSDLConstants.WSDL_ATTRIB_STYLE.equals(attributeName)) {
style = parser.getAttributeValue(i);
} else if (WSDLConstants.WSDL_ATTRIB_SOAP_ACTION.equals(attributeName)) {
soapAction = parser.getAttributeValue(i);
}
}
}
if (!SOAP12DocumentLiteralHTTPBinding.DOCUMENT_STYLE.equals(style)) {
binding = null;
throw new UnsupportedBindingException("unsupported style: " + style);
}
if (soapAction != null) {
binding.setSoapAction(operationName, soapAction);
}
}
/*
* (non-Javadoc)
* @see org.ws4d.java.wsdl.WSDLBindingBuilder#parseInputExtension(java.lang
* .String, org.ws4d.java.io.xml.ElementParser)
*/
public void parseInputExtension(String inputName, ElementParser parser) throws UnsupportedBindingException {
parseIoTypeExtension(parser);
}
/*
* (non-Javadoc)
* @see org.ws4d.java.wsdl.WSDLBindingBuilder#parseOutputExtension(java.
* lang.String, org.ws4d.java.io.xml.ElementParser)
*/
public void parseOutputExtension(String outputName, ElementParser parser) throws UnsupportedBindingException {
parseIoTypeExtension(parser);
}
/*
* (non-Javadoc)
* @see org.ws4d.java.wsdl.WSDLBindingBuilder#parseFaultExtension(java.lang
* .String, org.ws4d.java.io.xml.ElementParser)
*/
public void parseFaultExtension(String faultName, ElementParser parser) throws UnsupportedBindingException {
parseIoTypeExtension(parser);
}
/*
* (non-Javadoc)
* @see org.ws4d.java.wsdl.WSDLBindingBuilder#parsePortExtension(org.ws4d
* .java.data.QName, org.ws4d.java.data.QName,
* org.ws4d.java.io.xml.ElementParser)
*/
public WSDLPort parsePortExtension(String portName, QName bindingName, ElementParser parser) {
SOAP12DocumentLiteralHTTPPort port = new SOAP12DocumentLiteralHTTPPort(portName, bindingName);
int attributeCount = parser.getAttributeCount();
for (int i = 0; i < attributeCount; i++) {
String attributeNamespace = parser.getAttributeNamespace(i);
String attributeName = parser.getAttributeName(i);
if ("".equals(attributeNamespace)) {
if (WSDLConstants.WSDL_ATTRIB_LOCATION.equals(attributeName)) {
port.setLocation(new URI(parser.getAttributeValue(i)));
}
}
}
return port;
}
private void parseIoTypeExtension(ElementParser parser) throws UnsupportedBindingException {
if (binding == null) {
throw new UnsupportedBindingException("no acceptable binding extension or operation extension processed");
}
String use = null;
int attributeCount = parser.getAttributeCount();
for (int i = 0; i < attributeCount; i++) {
String attributeNamespace = parser.getAttributeNamespace(i);
String attributeName = parser.getAttributeName(i);
if ("".equals(attributeNamespace)) {
if (WSDLConstants.WSDL_ATTRIB_USE.equals(attributeName)) {
use = parser.getAttributeValue(i);
}
}
}
if (!SOAP12DocumentLiteralHTTPBinding.LITERAL_USE.equals(use)) {
binding = null;
throw new UnsupportedBindingException("unsupported use: " + use);
}
}
}