You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2006/05/12 22:17:56 UTC
svn commit: r405857 [2/2] - in /webservices/axis2/trunk/java: ./
modules/common/src/org/apache/axis2/i18n/
modules/core/src/org/apache/axis2/addressing/
modules/core/src/org/apache/axis2/deployment/
modules/core/src/org/apache/axis2/description/ module...
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2OM.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2OM.java?rev=405857&r1=405856&r2=405857&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2OM.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2OM.java Fri May 12 13:17:55 2006
@@ -1,815 +1,837 @@
-package org.apache.axis2.description;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMAttribute;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.util.StAXUtils;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
-import org.apache.axis2.wsdl.SOAPHeaderMessage;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.java2wsdl.Java2WSDLConstants;
-import org.apache.ws.policy.Policy;
-import org.apache.ws.policy.PolicyConstants;
-import org.apache.ws.policy.PolicyReference;
-import org.apache.ws.policy.util.PolicyFactory;
-import org.apache.ws.policy.util.PolicyRegistry;
-import org.apache.ws.policy.util.StAXPolicyWriter;
-
-/*
- * Copyright 2004,2005 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.
- *
- *
- */
-
-public class AxisService2OM implements Java2WSDLConstants {
-
- private AxisService axisService;
-
- private String[] url;
-
- private String targetNamespace;
-
- private OMElement definition;
-
- private OMNamespace soap;
-
- private OMNamespace soap12;
-
- private OMNamespace http;
-
- private OMNamespace mime;
-
- private OMNamespace tns;
-
- private OMNamespace wsdl;
-
- private String style;
-
- private String use;
-
- private boolean generateHttp = false;
-
- public AxisService2OM(AxisService service, String[] serviceURL,
- String style, String use) {
- this.axisService = service;
- url = serviceURL;
- if (style == null) {
- this.style = DOCUMNT;
- } else {
- this.style = style;
- }
- if (use == null) {
- this.use = LITERAL;
- } else {
- this.use = use;
- }
- this.targetNamespace = service.getTargetNamespace();
- }
-
- public OMElement generateOM() throws Exception {
- OMFactory fac = OMAbstractFactory.getOMFactory();
- wsdl = fac.createOMNamespace(WSDL_NAMESPACE,
- DEFAULT_WSDL_NAMESPACE_PREFIX);
- OMElement ele = fac.createOMElement("definitions", wsdl);
- setDefinitionElement(ele);
-
- Map nameSpaceMap = axisService.getNameSpacesMap();
- Iterator keys = nameSpaceMap.keySet().iterator();
- while (keys.hasNext()) {
- String key = (String) keys.next();
- if ("".equals(key)) {
- ele.declareDefaultNamespace((String) nameSpaceMap.get(key));
- } else {
- ele.declareNamespace((String) nameSpaceMap.get(key), key);
- }
- }
- soap = ele.declareNamespace(URI_WSDL11_SOAP, SOAP11_PREFIX);
- soap12 = ele.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX);
- http = ele.declareNamespace(HTTP_NAMESPACE, HTTP_PREFIX);
- mime = ele.declareNamespace(MIME_NAMESPACE, MIME_PREFIX);
- String prefix = getPrefix(axisService.getTargetNamespace());
- if (prefix == null || "".equals(prefix)) {
- prefix = DEFAULT_TARGET_NAMESPACE_PREFIX;
- }
- axisService.getNameSpacesMap().put(prefix,
- axisService.getTargetNamespace());
- tns = ele.declareNamespace(axisService.getTargetNamespace(), prefix);
-
- ele.addAttribute("targetNamespace", axisService.getTargetNamespace(),
- null);
- OMElement wsdlTypes = fac.createOMElement("types", wsdl);
- ele.addChild(wsdlTypes);
-
- // populate the schema mappings
- axisService.populateSchemaMappings();
-
- ArrayList schemas = axisService.getSchema();
- for (int i = 0; i < schemas.size(); i++) {
- StringWriter writer = new StringWriter();
-// XmlSchema schema = (XmlSchema) schemas.get(i);
- XmlSchema schema = axisService.getSchema(i);
-
- schema.write(writer);
- if (!"".equals(writer.toString())) {
- XMLStreamReader xmlReader = StAXUtils
- .createXMLStreamReader(new ByteArrayInputStream(writer
- .toString().getBytes()));
-
- StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac, xmlReader);
- wsdlTypes.addChild(staxOMBuilder.getDocumentElement());
- }
- }
-
-
- generateMessages(fac, ele);
- generatePortType(fac, ele);
- generateSOAP11Binding(fac, ele);
- generateSOAP12Binding(fac, ele);
- //generateHttp
- if (axisService.getParent() != null) {
- AxisDescription axisdesc = axisService.getParent().getParent();
- Parameter parameter = axisdesc.getParameter("enableHTTP");
- if (parameter != null) {
- Object value = parameter.getValue();
- if ("true".equals(value.toString())) {
- generateHttp = true;
- generatePostBinding(fac, ele);
- }
- }
- }
- generateService(fac, ele);
-
- return ele;
- }
-
-
- private void generateMessages(OMFactory fac,
- OMElement defintions) {
- Iterator operations = axisService.getOperations();
- while (operations.hasNext()) {
- AxisOperation axisOperation = (AxisOperation) operations.next();
-
- String MEP = axisOperation.getMessageExchangePattern();
- if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage inaxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
- if (inaxisMessage != null) {
- writeMessage(inaxisMessage, fac, defintions);
- generateHeaderMessages(inaxisMessage, fac, defintions);
- }
- }
-
- if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage outAxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
- if (outAxisMessage != null) {
- writeMessage(outAxisMessage, fac, defintions);
- generateHeaderMessages(outAxisMessage, fac, defintions);
- }
- }
-
- // generate fault Messages
- ArrayList faultyMessages = axisOperation.getFaultMessages();
- if (faultyMessages != null) {
- for (int i = 0; i < faultyMessages.size(); i++) {
- AxisMessage axisMessage = (AxisMessage) faultyMessages
- .get(i);
- writeMessage(axisMessage, fac, defintions);
- generateHeaderMessages(axisMessage, fac, defintions);
- }
- }
- }
- }
-
- private void generateHeaderMessages(AxisMessage axismessage, OMFactory fac,
- OMElement defintions) {
- ArrayList extList = axismessage.getSoapHeaders();
- for (int i = 0; i < extList.size(); i++) {
- SOAPHeaderMessage header = (SOAPHeaderMessage) extList.get(i);
- OMElement messageElement = fac.createOMElement(MESSAGE_LOCAL_NAME,
- wsdl);
- messageElement.addAttribute(ATTRIBUTE_NAME, header.getMessage()
- .getLocalPart(), null);
- defintions.addChild(messageElement);
- OMElement messagePart = fac.createOMElement(PART_ATTRIBUTE_NAME,
- wsdl);
- messageElement.addChild(messagePart);
- messagePart.addAttribute(ATTRIBUTE_NAME, "part1", null);
- messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME, getPrefix(header
- .getElement().getNamespaceURI())
- + ":" + header.getElement().getLocalPart(), null);
- }
- }
-
- private void writeMessage(AxisMessage axismessage, OMFactory fac,
- OMElement defintions) {
- QName schemaElementName = axismessage.getElementQName();
- OMElement messageElement = fac
- .createOMElement(MESSAGE_LOCAL_NAME, wsdl);
- messageElement.addAttribute(ATTRIBUTE_NAME, axismessage.getName()
- , null);
- defintions.addChild(messageElement);
- if (schemaElementName != null) {
- OMElement messagePart = fac.createOMElement(PART_ATTRIBUTE_NAME,
- wsdl);
- messageElement.addChild(messagePart);
- messagePart.addAttribute(ATTRIBUTE_NAME, "part1", null);
- messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME,
- getPrefix(schemaElementName.getNamespaceURI()) + ":"
- + schemaElementName.getLocalPart(), null);
- }
-
- }
-
- /**
- * Generate the porttypes
- */
- private void generatePortType(OMFactory fac, OMElement defintions)
- throws Exception {
- OMElement portType = fac.createOMElement(PORT_TYPE_LOCAL_NAME, wsdl);
- defintions.addChild(portType);
- portType.addAttribute(ATTRIBUTE_NAME, axisService.getName()
- + PORT_TYPE_SUFFIX, null);
-
- Iterator operations = axisService.getOperations();
- while (operations.hasNext()) {
- AxisOperation axisOperation = (AxisOperation) operations.next();
- if (axisOperation.isControlOperation()) {
- continue;
- }
- String operationName = axisOperation.getName().getLocalPart();
- OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
- wsdl);
- portType.addChild(operation);
- operation.addAttribute(ATTRIBUTE_NAME, operationName, null);
- addPolicy(PolicyInclude.OPERATION_POLICY, axisOperation
- .getPolicyInclude(), operation, fac);
-
- String MEP = axisOperation.getMessageExchangePattern();
- if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage inaxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
- if (inaxisMessage != null) {
- OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
- wsdl);
- input.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
- + ":" + inaxisMessage.getName() ,
- null);
- addPolicy(PolicyInclude.INPUT_POLICY, inaxisMessage
- .getPolicyInclude(), input, fac);
- operation.addChild(input);
- }
- }
-
- if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage outAxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
- if (outAxisMessage != null) {
- OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
- wsdl);
- output.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
- + ":" + outAxisMessage.getName() ,
- null);
- addPolicy(PolicyInclude.OUTPUT_POLICY, outAxisMessage
- .getPolicyInclude(), output, fac);
- operation.addChild(output);
- }
- }
-
- // generate fault Messages
- ArrayList faultyMessages = axisOperation.getFaultMessages();
- if (faultyMessages != null) {
- for (int i = 0; i < faultyMessages.size(); i++) {
- AxisMessage faultyMessge = (AxisMessage) faultyMessages
- .get(i);
- OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
- wsdl);
- fault.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
- + ":" + faultyMessge.getName() ,
- null);
- fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
- null);
- // TODO add policies for fault messages
- operation.addChild(fault);
- }
- }
-
- }
- }
-
- /**
- * Generate the service
- */
- public void generateService(OMFactory fac, OMElement defintions)
- throws Exception {
- OMElement service = fac.createOMElement(SERVICE_LOCAL_NAME, wsdl);
- defintions.addChild(service);
- service.addAttribute(ATTRIBUTE_NAME, axisService.getName(), null);
- generateSOAP11Port(fac, service);
- generateSOAP12Port(fac, service);
-
- addPolicy(PolicyInclude.SERVICE_POLICY, axisService.getPolicyInclude(),
- service, fac);
-
- if (generateHttp) {
- generateHTTPPort(fac, service);
- }
-
- }
-
- private void generateSOAP11Port(OMFactory fac, OMElement service)
- throws Exception {
- for (int i = 0; i < url.length; i++) {
- String urlString = url[i];
- OMElement port = fac.createOMElement(PORT, wsdl);
- service.addChild(port);
- port.addAttribute(ATTRIBUTE_NAME, axisService.getName()
- + SOAP11PORT + i, null);
- port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
- + axisService.getName() + BINDING_NAME_SUFFIX, null);
- addExtensionElement(fac, port, SOAP_ADDRESS, LOCATION, urlString,
- soap);
-
- addPolicy(PolicyInclude.PORT_POLICY,
- axisService.getPolicyInclude(), service, fac);
- }
-
- }
-
- private void generateHTTPPort(OMFactory fac, OMElement service)
- throws Exception {
- for (int i = 0; i < url.length; i++) {
- String urlString = url[i];
- if (urlString.startsWith("http")) {
- OMElement port = fac.createOMElement(PORT, wsdl);
- service.addChild(port);
- port.addAttribute(ATTRIBUTE_NAME, axisService.getName()
- + HTTP_PORT + i, null);
- port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
- + axisService.getName() + HTTP_BINDING, null);
- OMElement extElement = fac.createOMElement("address", http);
- port.addChild(extElement);
- urlString = urlString.replaceAll("services", "rest");
- extElement.addAttribute("location", urlString, null);
- }
- }
- }
-
- private void generateSOAP12Port(OMFactory fac, OMElement service)
- throws Exception {
- for (int i = 0; i < url.length; i++) {
- String urlString = url[i];
- OMElement port = fac.createOMElement(PORT, wsdl);
- service.addChild(port);
- port.addAttribute(ATTRIBUTE_NAME, axisService.getName()
- + SOAP12PORT + i, null);
- port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
- + axisService.getName() + SOAP12BINDING_NAME_SUFFIX, null);
- addExtensionElement(fac, port, SOAP_ADDRESS, LOCATION, urlString,
- soap12);
-
- addPolicy(PolicyInclude.PORT_POLICY,
- axisService.getPolicyInclude(), service, fac);
- }
- }
-
- /**
- * Generate the bindings
- */
- private void generateSOAP11Binding(OMFactory fac, OMElement defintions)
- throws Exception {
- OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
- defintions.addChild(binding);
- binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
- + BINDING_NAME_SUFFIX, null);
- binding.addAttribute("type", tns.getPrefix() + ":"
- + axisService.getName() + PORT_TYPE_SUFFIX, null);
- addPolicy(PolicyInclude.BINDING_POLICY, axisService.getPolicyInclude(),
- binding, fac);
-
-//Adding ext elements
- addExtensionElemnet(fac, binding, BINDING_LOCAL_NAME, TRANSPORT,
- TRANSPORT_URI, STYLE, style, soap);
-
- Iterator operations = axisService.getOperations();
- while (operations.hasNext()) {
- AxisOperation axisOperation = (AxisOperation) operations.next();
- if (axisOperation.isControlOperation()) {
- continue;
- }
- String opeartionName = axisOperation.getName().getLocalPart();
- OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
- wsdl);
- binding.addChild(operation);
- String soapAction = axisOperation.getSoapAction();
- if (soapAction == null) {
- soapAction = "";
- }
- addExtensionElemnet(fac, operation, OPERATION_LOCAL_NAME,
- SOAP_ACTION, soapAction, STYLE, style, soap);
- addPolicy(PolicyInclude.BINDING_OPERATION_POLICY, axisOperation
- .getPolicyInclude(), operation, fac);
-
- String MEP = axisOperation.getMessageExchangePattern();
-
- if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage inaxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
- if (inaxisMessage != null) {
- operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
- OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
- wsdl);
- addExtensionElemnet(fac, input, SOAP_BODY, SOAP_USE, use,
- "namespace", targetNamespace, soap);
- addPolicy(PolicyInclude.BINDING_INPUT_POLICY, inaxisMessage
- .getPolicyInclude(), input, fac);
- operation.addChild(input);
- writeSoapHeaders(inaxisMessage, fac, input, soap);
- }
- }
-
- if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage outAxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
- if (outAxisMessage != null) {
- OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
- wsdl);
- addExtensionElemnet(fac, output, SOAP_BODY, SOAP_USE, use,
- "namespace", targetNamespace, soap);
- addPolicy(PolicyInclude.BINDING_OUTPUT_POLICY,
- outAxisMessage.getPolicyInclude(), output, fac);
- operation.addChild(output);
- writeSoapHeaders(outAxisMessage, fac, output, soap);
- }
- }
-
- // generate fault Messages
- ArrayList faultyMessages = axisOperation.getFaultMessages();
- if (faultyMessages != null) {
- for (int i = 0; i < faultyMessages.size(); i++) {
- AxisMessage faultyMessge = (AxisMessage) faultyMessages
- .get(i);
- OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
- wsdl);
- addExtensionElemnet(fac, fault, SOAP_BODY, SOAP_USE, use,
- "namespace", targetNamespace, soap);
- fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
- null);
-// TODO adding policies for fault messages
- operation.addChild(fault);
- writeSoapHeaders(faultyMessge, fac, fault, soap);
- }
- }
- }
-
- }
-
- /**
- * Generate the bindings
- */
- private void generateSOAP12Binding(OMFactory fac, OMElement defintions)
- throws Exception {
- OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
- defintions.addChild(binding);
- binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
- + SOAP12BINDING_NAME_SUFFIX, null);
- binding.addAttribute("type", tns.getPrefix() + ":"
- + axisService.getName() + PORT_TYPE_SUFFIX, null);
- addPolicy(PolicyInclude.BINDING_POLICY, axisService.getPolicyInclude(),
- binding, fac);
-
-//Adding ext elements
- addExtensionElemnet(fac, binding, BINDING_LOCAL_NAME, TRANSPORT,
- TRANSPORT_URI, STYLE, style, soap12);
-
- Iterator operations = axisService.getOperations();
- while (operations.hasNext()) {
- AxisOperation axisOperation = (AxisOperation) operations.next();
- if (axisOperation.isControlOperation()) {
- continue;
- }
- String opeartionName = axisOperation.getName().getLocalPart();
- OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
- wsdl);
- binding.addChild(operation);
- String soapAction = axisOperation.getSoapAction();
- if (soapAction == null) {
- soapAction = "";
- }
- addExtensionElemnet(fac, operation, OPERATION_LOCAL_NAME,
- SOAP_ACTION, soapAction, STYLE, style, soap12);
- addPolicy(PolicyInclude.BINDING_OPERATION_POLICY, axisOperation
- .getPolicyInclude(), operation, fac);
-
- String MEP = axisOperation.getMessageExchangePattern();
-
- if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage inaxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
- if (inaxisMessage != null) {
- operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
- OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
- wsdl);
- addExtensionElemnet(fac, input, SOAP_BODY, SOAP_USE, use,
- "namespace", targetNamespace, soap12);
- addPolicy(PolicyInclude.BINDING_INPUT_POLICY, inaxisMessage
- .getPolicyInclude(), input, fac);
- operation.addChild(input);
- writeSoapHeaders(inaxisMessage, fac, input, soap12);
- }
- }
-
- if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage outAxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
- if (outAxisMessage != null) {
- OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
- wsdl);
- addExtensionElemnet(fac, output, SOAP_BODY, SOAP_USE, use,
- "namespace", targetNamespace, soap12);
- addPolicy(PolicyInclude.BINDING_OUTPUT_POLICY,
- outAxisMessage.getPolicyInclude(), output, fac);
- operation.addChild(output);
- writeSoapHeaders(outAxisMessage, fac, output, soap12);
- }
- }
-
- // generate fault Messages
- ArrayList faultyMessages = axisOperation.getFaultMessages();
- if (faultyMessages != null) {
- for (int i = 0; i < faultyMessages.size(); i++) {
- AxisMessage faultyMessge = (AxisMessage) faultyMessages
- .get(i);
- OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
- wsdl);
- addExtensionElemnet(fac, fault, SOAP_BODY, SOAP_USE, use,
- "namespace", targetNamespace, soap12);
- fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
- null);
-// add policies for fault messages
- operation.addChild(fault);
- writeSoapHeaders(faultyMessge, fac, fault, soap12);
- }
- }
- }
- }
-
- private void generatePostBinding(OMFactory fac, OMElement defintions)
- throws Exception {
- OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
- defintions.addChild(binding);
- binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
- + HTTP_BINDING, null);
- binding.addAttribute("type", tns.getPrefix() + ":"
- + axisService.getName() + PORT_TYPE_SUFFIX, null);
-
-//Adding ext elements
- OMElement httpBinding = fac.createOMElement("binding", http);
- binding.addChild(httpBinding);
- httpBinding.addAttribute("verb", "POST", null);
-
- Iterator operations = axisService.getOperations();
- while (operations.hasNext()) {
- AxisOperation axisOperation = (AxisOperation) operations.next();
- if (axisOperation.isControlOperation()) {
- continue;
- }
- String opeartionName = axisOperation.getName().getLocalPart();
- OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
- wsdl);
- binding.addChild(operation);
-
- OMElement httpOperation = fac.createOMElement("operation", http);
- operation.addChild(httpOperation);
- httpOperation.addAttribute("location", axisOperation.getName()
- .getLocalPart(), null);
-
- String MEP = axisOperation.getMessageExchangePattern();
-
- if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage inaxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
- if (inaxisMessage != null) {
- operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
- OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
- wsdl);
- OMElement inputelement = fac.createOMElement("content",
- mime);
- input.addChild(inputelement);
- inputelement.addAttribute("type", "text/xml", null);
- operation.addChild(input);
- }
- }
-
- if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
- || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
- AxisMessage outAxisMessage = axisOperation
- .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
- if (outAxisMessage != null) {
- OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
- wsdl);
- OMElement outElement = fac.createOMElement("content", mime);
- outElement.addChild(outElement);
- outElement.addAttribute("type", "text/xml", null);
- output.addChild(outElement);
- operation.addChild(output);
- }
- }
- }
- }
-
- private void writeSoapHeaders(AxisMessage inaxisMessage, OMFactory fac,
- OMElement input, OMNamespace soapNameSpace) throws Exception {
- ArrayList extElementList;
- extElementList = inaxisMessage.getSoapHeaders();
- if (extElementList != null) {
- Iterator elements = extElementList.iterator();
- while (elements.hasNext()) {
- SOAPHeaderMessage soapheader = (SOAPHeaderMessage) elements
- .next();
- addSOAPHeader(fac, input, soapheader, soapNameSpace);
- }
- }
- }
-
- private void addExtensionElemnet(OMFactory fac, OMElement element,
- String name, String att1Name, String att1Value, String att2Name,
- String att2Value, OMNamespace soapNameSpace) {
- OMElement soapbinding = fac.createOMElement(name, soapNameSpace);
- element.addChild(soapbinding);
- soapbinding.addAttribute(att1Name, att1Value, null);
- soapbinding.addAttribute(att2Name, att2Value, null);
- }
-
- private void addExtensionElement(OMFactory fac, OMElement element,
- String name, String att1Name, String att1Value,
- OMNamespace soapNameSpace) {
- OMElement extElement = fac.createOMElement(name, soapNameSpace);
- element.addChild(extElement);
- extElement.addAttribute(att1Name, att1Value, null);
- }
-
- private void setDefinitionElement(OMElement defintion) {
- this.definition = defintion;
- }
-
- private OMElement getDefinitionElement() {
- return definition;
- }
-
- private void addSOAPHeader(OMFactory fac, OMElement element,
- SOAPHeaderMessage header, OMNamespace soapNameSpace) {
- OMElement extElement = fac.createOMElement("header", soapNameSpace);
- element.addChild(extElement);
- String use = header.getUse();
- if (use != null) {
- extElement.addAttribute("use", use, null);
- }
- if (header.part() != null) {
- extElement.addAttribute("part", header.part(), null);
- }
- if (header.getMessage() != null) {
- extElement.addAttribute("message", getPrefix(targetNamespace) + ":"
- + header.getMessage().getLocalPart(), null);
- }
- }
-
- private String getPrefix(String targetNameSpace) {
- Map map = axisService.getNameSpacesMap();
- Iterator keys = map.keySet().iterator();
- while (keys.hasNext()) {
- String key = (String) keys.next();
- if (map.get(key).equals(targetNameSpace)) {
- return key;
- }
- }
- return null;
- }
-
- private void addPolicy(int type, PolicyInclude policyInclude,
- OMElement element, OMFactory factory) throws Exception {
- ArrayList elementList = policyInclude.getPolicyElements(type);
- StAXPolicyWriter pwrt = (StAXPolicyWriter) PolicyFactory
- .getPolicyWriter(PolicyFactory.StAX_POLICY_WRITER);
-
- for (Iterator iterator = elementList.iterator(); iterator.hasNext();) {
- Object policyElement = iterator.next();
-
- if (policyElement instanceof Policy) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- pwrt.writePolicy((Policy) policyElement, baos);
-
- ByteArrayInputStream bais = new ByteArrayInputStream(baos
- .toByteArray());
- element.addChild(OMXMLBuilderFactory.createStAXOMBuilder(
- factory,
- StAXUtils.createXMLStreamReader(
- bais)).getDocumentElement());
-
- } else if (policyElement instanceof PolicyReference) {
- OMNamespace ns = factory.createOMNamespace(PolicyConstants.WS_POLICY_NAMESPACE_URI, PolicyConstants.WS_POLICY_PREFIX);
- OMElement refElement = factory.createOMElement(PolicyConstants.WS_POLICY_REFERENCE, ns);
- String policyURIString = ((PolicyReference) policyElement).getPolicyURIString();
- OMAttribute attribute = factory.createOMAttribute("URI", null, policyURIString);
- refElement.addAttribute(attribute);
- element.addChild(refElement);
-
- PolicyRegistry reg = policyInclude.getPolicyRegistry();
- Policy p = reg.lookup(policyURIString);
-
- if(p == null) {
- throw new Exception("Policy not found for uri : " + policyURIString);
- }
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- pwrt.writePolicy(p, baos);
-
- ByteArrayInputStream bais = new ByteArrayInputStream(baos
- .toByteArray());
- getDefinitionElement().addChild(OMXMLBuilderFactory.createStAXOMBuilder(
- factory,
- StAXUtils.createXMLStreamReader(
- bais)).getDocumentElement());
-
- // TODO refactor this ..
-
- }
-
- }
- }
+package org.apache.axis2.description;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.llom.OMNamespaceImpl;
+import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.wsdl.SOAPHeaderMessage;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.java2wsdl.Java2WSDLConstants;
+import org.apache.ws.policy.Policy;
+import org.apache.ws.policy.PolicyConstants;
+import org.apache.ws.policy.PolicyReference;
+import org.apache.ws.policy.util.PolicyFactory;
+import org.apache.ws.policy.util.PolicyRegistry;
+import org.apache.ws.policy.util.StAXPolicyWriter;
+
+/*
+ * Copyright 2004,2005 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.
+ *
+ *
+ */
+
+public class AxisService2OM implements Java2WSDLConstants {
+
+ private AxisService axisService;
+
+ private String[] url;
+
+ private String targetNamespace;
+
+ private OMElement definition;
+
+ private OMNamespace soap;
+
+ private OMNamespace soap12;
+
+ private OMNamespace http;
+
+ private OMNamespace mime;
+
+ private OMNamespace tns;
+
+ private OMNamespace wsdl;
+
+ private String style;
+
+ private String use;
+
+ private boolean generateHttp = false;
+
+ public AxisService2OM(AxisService service, String[] serviceURL,
+ String style, String use) {
+ this.axisService = service;
+ url = serviceURL;
+ if (style == null) {
+ this.style = DOCUMNT;
+ } else {
+ this.style = style;
+ }
+ if (use == null) {
+ this.use = LITERAL;
+ } else {
+ this.use = use;
+ }
+ this.targetNamespace = service.getTargetNamespace();
+ }
+
+ public OMElement generateOM() throws Exception {
+ OMFactory fac = OMAbstractFactory.getOMFactory();
+ wsdl = fac.createOMNamespace(WSDL_NAMESPACE,
+ DEFAULT_WSDL_NAMESPACE_PREFIX);
+ OMElement ele = fac.createOMElement("definitions", wsdl);
+ setDefinitionElement(ele);
+
+ Map nameSpaceMap = axisService.getNameSpacesMap();
+ Iterator keys = nameSpaceMap.keySet().iterator();
+ while (keys.hasNext()) {
+ String key = (String) keys.next();
+ if ("".equals(key)) {
+ ele.declareDefaultNamespace((String) nameSpaceMap.get(key));
+ } else {
+ ele.declareNamespace((String) nameSpaceMap.get(key), key);
+ }
+ }
+ soap = ele.declareNamespace(URI_WSDL11_SOAP, SOAP11_PREFIX);
+ soap12 = ele.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX);
+ http = ele.declareNamespace(HTTP_NAMESPACE, HTTP_PREFIX);
+ mime = ele.declareNamespace(MIME_NAMESPACE, MIME_PREFIX);
+ String prefix = getPrefix(axisService.getTargetNamespace());
+ if (prefix == null || "".equals(prefix)) {
+ prefix = DEFAULT_TARGET_NAMESPACE_PREFIX;
+ }
+ axisService.getNameSpacesMap().put(prefix,
+ axisService.getTargetNamespace());
+ tns = ele.declareNamespace(axisService.getTargetNamespace(), prefix);
+
+ ele.addAttribute("targetNamespace", axisService.getTargetNamespace(),
+ null);
+ OMElement wsdlTypes = fac.createOMElement("types", wsdl);
+ ele.addChild(wsdlTypes);
+
+ // populate the schema mappings
+ axisService.populateSchemaMappings();
+
+ ArrayList schemas = axisService.getSchema();
+ for (int i = 0; i < schemas.size(); i++) {
+ StringWriter writer = new StringWriter();
+// XmlSchema schema = (XmlSchema) schemas.get(i);
+ XmlSchema schema = axisService.getSchema(i);
+
+ schema.write(writer);
+ if (!"".equals(writer.toString())) {
+ XMLStreamReader xmlReader = StAXUtils
+ .createXMLStreamReader(new ByteArrayInputStream(writer
+ .toString().getBytes()));
+
+ StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac, xmlReader);
+ wsdlTypes.addChild(staxOMBuilder.getDocumentElement());
+ }
+ }
+
+
+ generateMessages(fac, ele);
+ generatePortType(fac, ele);
+ generateSOAP11Binding(fac, ele);
+ generateSOAP12Binding(fac, ele);
+ //generateHttp
+ if (axisService.getParent() != null) {
+ AxisDescription axisdesc = axisService.getParent().getParent();
+ Parameter parameter = axisdesc.getParameter("enableHTTP");
+ if (parameter != null) {
+ Object value = parameter.getValue();
+ if ("true".equals(value.toString())) {
+ generateHttp = true;
+ generatePostBinding(fac, ele);
+ }
+ }
+ }
+ generateService(fac, ele);
+
+ return ele;
+ }
+
+
+ private void generateMessages(OMFactory fac,
+ OMElement defintions) {
+ Iterator operations = axisService.getOperations();
+ while (operations.hasNext()) {
+ AxisOperation axisOperation = (AxisOperation) operations.next();
+
+ String MEP = axisOperation.getMessageExchangePattern();
+ if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage inaxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+ if (inaxisMessage != null) {
+ writeMessage(inaxisMessage, fac, defintions);
+ generateHeaderMessages(inaxisMessage, fac, defintions);
+ }
+ }
+
+ if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage outAxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+ if (outAxisMessage != null) {
+ writeMessage(outAxisMessage, fac, defintions);
+ generateHeaderMessages(outAxisMessage, fac, defintions);
+ }
+ }
+
+ // generate fault Messages
+ ArrayList faultyMessages = axisOperation.getFaultMessages();
+ if (faultyMessages != null) {
+ for (int i = 0; i < faultyMessages.size(); i++) {
+ AxisMessage axisMessage = (AxisMessage) faultyMessages
+ .get(i);
+ writeMessage(axisMessage, fac, defintions);
+ generateHeaderMessages(axisMessage, fac, defintions);
+ }
+ }
+ }
+ }
+
+ private void generateHeaderMessages(AxisMessage axismessage, OMFactory fac,
+ OMElement defintions) {
+ ArrayList extList = axismessage.getSoapHeaders();
+ for (int i = 0; i < extList.size(); i++) {
+ SOAPHeaderMessage header = (SOAPHeaderMessage) extList.get(i);
+ OMElement messageElement = fac.createOMElement(MESSAGE_LOCAL_NAME,
+ wsdl);
+ messageElement.addAttribute(ATTRIBUTE_NAME, header.getMessage()
+ .getLocalPart(), null);
+ defintions.addChild(messageElement);
+ OMElement messagePart = fac.createOMElement(PART_ATTRIBUTE_NAME,
+ wsdl);
+ messageElement.addChild(messagePart);
+ messagePart.addAttribute(ATTRIBUTE_NAME, "part1", null);
+ messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME, getPrefix(header
+ .getElement().getNamespaceURI())
+ + ":" + header.getElement().getLocalPart(), null);
+ }
+ }
+
+ private void writeMessage(AxisMessage axismessage, OMFactory fac,
+ OMElement defintions) {
+ QName schemaElementName = axismessage.getElementQName();
+ OMElement messageElement = fac
+ .createOMElement(MESSAGE_LOCAL_NAME, wsdl);
+ messageElement.addAttribute(ATTRIBUTE_NAME, axismessage.getName()
+ , null);
+ defintions.addChild(messageElement);
+ if (schemaElementName != null) {
+ OMElement messagePart = fac.createOMElement(PART_ATTRIBUTE_NAME,
+ wsdl);
+ messageElement.addChild(messagePart);
+ messagePart.addAttribute(ATTRIBUTE_NAME, "part1", null);
+ messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME,
+ getPrefix(schemaElementName.getNamespaceURI()) + ":"
+ + schemaElementName.getLocalPart(), null);
+ }
+
+ }
+
+ /**
+ * Generate the porttypes
+ */
+ private void generatePortType(OMFactory fac, OMElement defintions)
+ throws Exception {
+ OMElement portType = fac.createOMElement(PORT_TYPE_LOCAL_NAME, wsdl);
+ defintions.addChild(portType);
+ portType.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+ + PORT_TYPE_SUFFIX, null);
+
+ Iterator operations = axisService.getOperations();
+ while (operations.hasNext()) {
+ AxisOperation axisOperation = (AxisOperation) operations.next();
+ if (axisOperation.isControlOperation()) {
+ continue;
+ }
+ String operationName = axisOperation.getName().getLocalPart();
+ OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+ wsdl);
+ portType.addChild(operation);
+ operation.addAttribute(ATTRIBUTE_NAME, operationName, null);
+ addPolicy(PolicyInclude.OPERATION_POLICY, axisOperation
+ .getPolicyInclude(), operation, fac);
+
+ String MEP = axisOperation.getMessageExchangePattern();
+ if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage inaxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+ if (inaxisMessage != null) {
+ OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
+ wsdl);
+ input.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
+ + ":" + inaxisMessage.getName() ,
+ null);
+ addPolicy(PolicyInclude.INPUT_POLICY, inaxisMessage
+ .getPolicyInclude(), input, fac);
+ operation.addChild(input);
+ }
+ }
+
+ if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage outAxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+ if (outAxisMessage != null) {
+ OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
+ wsdl);
+ output.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
+ + ":" + outAxisMessage.getName() ,
+ null);
+ addPolicy(PolicyInclude.OUTPUT_POLICY, outAxisMessage
+ .getPolicyInclude(), output, fac);
+ operation.addChild(output);
+ }
+ }
+
+ // generate fault Messages
+ ArrayList faultyMessages = axisOperation.getFaultMessages();
+ if (faultyMessages != null) {
+ for (int i = 0; i < faultyMessages.size(); i++) {
+ AxisMessage faultyMessge = (AxisMessage) faultyMessages
+ .get(i);
+ OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
+ wsdl);
+ fault.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
+ + ":" + faultyMessge.getName() ,
+ null);
+ fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
+ null);
+ // TODO add policies for fault messages
+ operation.addChild(fault);
+ }
+ }
+
+ }
+ }
+
+ /**
+ * Generate the service
+ */
+ public void generateService(OMFactory fac, OMElement defintions)
+ throws Exception {
+ OMElement service = fac.createOMElement(SERVICE_LOCAL_NAME, wsdl);
+ defintions.addChild(service);
+ service.addAttribute(ATTRIBUTE_NAME, axisService.getName(), null);
+ generateSOAP11Port(fac, service);
+ generateSOAP12Port(fac, service);
+
+ addPolicy(PolicyInclude.SERVICE_POLICY, axisService.getPolicyInclude(),
+ service, fac);
+
+ if (generateHttp) {
+ generateHTTPPort(fac, service);
+ }
+
+ }
+
+ private void generateSOAP11Port(OMFactory fac, OMElement service)
+ throws Exception {
+ for (int i = 0; i < url.length; i++) {
+ String urlString = url[i];
+ OMElement port = fac.createOMElement(PORT, wsdl);
+ service.addChild(port);
+ port.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+ + SOAP11PORT + i, null);
+ port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
+ + axisService.getName() + BINDING_NAME_SUFFIX, null);
+ addExtensionElement(fac, port, SOAP_ADDRESS, LOCATION, urlString,
+ soap);
+
+ addPolicy(PolicyInclude.PORT_POLICY,
+ axisService.getPolicyInclude(), service, fac);
+ }
+
+ }
+
+ private void generateHTTPPort(OMFactory fac, OMElement service)
+ throws Exception {
+ for (int i = 0; i < url.length; i++) {
+ String urlString = url[i];
+ if (urlString.startsWith("http")) {
+ OMElement port = fac.createOMElement(PORT, wsdl);
+ service.addChild(port);
+ port.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+ + HTTP_PORT + i, null);
+ port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
+ + axisService.getName() + HTTP_BINDING, null);
+ OMElement extElement = fac.createOMElement("address", http);
+ port.addChild(extElement);
+ urlString = urlString.replaceAll("services", "rest");
+ extElement.addAttribute("location", urlString, null);
+ }
+ }
+ }
+
+ private void generateSOAP12Port(OMFactory fac, OMElement service)
+ throws Exception {
+ for (int i = 0; i < url.length; i++) {
+ String urlString = url[i];
+ OMElement port = fac.createOMElement(PORT, wsdl);
+ service.addChild(port);
+ port.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+ + SOAP12PORT + i, null);
+ port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
+ + axisService.getName() + SOAP12BINDING_NAME_SUFFIX, null);
+ addExtensionElement(fac, port, SOAP_ADDRESS, LOCATION, urlString,
+ soap12);
+
+ addPolicy(PolicyInclude.PORT_POLICY,
+ axisService.getPolicyInclude(), service, fac);
+ }
+ }
+
+ /**
+ * Generate the bindings
+ */
+ private void generateSOAP11Binding(OMFactory fac, OMElement defintions)
+ throws Exception {
+ OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
+ defintions.addChild(binding);
+ binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+ + BINDING_NAME_SUFFIX, null);
+ binding.addAttribute("type", tns.getPrefix() + ":"
+ + axisService.getName() + PORT_TYPE_SUFFIX, null);
+ addPolicy(PolicyInclude.BINDING_POLICY, axisService.getPolicyInclude(),
+ binding, fac);
+
+//Adding ext elements
+ addExtensionElemnet(fac, binding, BINDING_LOCAL_NAME, TRANSPORT,
+ TRANSPORT_URI, STYLE, style, soap);
+
+ // Add WS-Addressing UsingAddressing element if appropriate
+ // SHOULD be on the binding element per the specification
+ if(axisService.getWSAddressingFlag().equals(AddressingConstants.ADDRESSING_OPTIONAL)){
+ OMNamespace wsawNamespace = fac.createOMNamespace(AddressingConstants.Final.WSAW_NAMESPACE,"wsaw");
+ addExtensionElement(fac, binding, AddressingConstants.USING_ADDRESSING, DEFAULT_WSDL_NAMESPACE_PREFIX+":required", "true", wsawNamespace);
+ } else if(axisService.getWSAddressingFlag().equals(AddressingConstants.ADDRESSING_REQUIRED)){
+ OMNamespace wsawNamespace = fac.createOMNamespace(AddressingConstants.Final.WSAW_NAMESPACE,"wsaw");
+ addExtensionElement(fac, binding, AddressingConstants.USING_ADDRESSING, DEFAULT_WSDL_NAMESPACE_PREFIX+":required", "true", wsawNamespace);
+ }
+
+ Iterator operations = axisService.getOperations();
+ while (operations.hasNext()) {
+ AxisOperation axisOperation = (AxisOperation) operations.next();
+ if (axisOperation.isControlOperation()) {
+ continue;
+ }
+ String opeartionName = axisOperation.getName().getLocalPart();
+ OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+ wsdl);
+ binding.addChild(operation);
+ String soapAction = axisOperation.getSoapAction();
+ if (soapAction == null) {
+ soapAction = "";
+ }
+ addExtensionElemnet(fac, operation, OPERATION_LOCAL_NAME,
+ SOAP_ACTION, soapAction, STYLE, style, soap);
+ addPolicy(PolicyInclude.BINDING_OPERATION_POLICY, axisOperation
+ .getPolicyInclude(), operation, fac);
+
+ String MEP = axisOperation.getMessageExchangePattern();
+
+ if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage inaxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+ if (inaxisMessage != null) {
+ operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
+ OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
+ wsdl);
+ addExtensionElemnet(fac, input, SOAP_BODY, SOAP_USE, use,
+ "namespace", targetNamespace, soap);
+ addPolicy(PolicyInclude.BINDING_INPUT_POLICY, inaxisMessage
+ .getPolicyInclude(), input, fac);
+ operation.addChild(input);
+ writeSoapHeaders(inaxisMessage, fac, input, soap);
+ }
+ }
+
+ if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage outAxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+ if (outAxisMessage != null) {
+ OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
+ wsdl);
+ addExtensionElemnet(fac, output, SOAP_BODY, SOAP_USE, use,
+ "namespace", targetNamespace, soap);
+ addPolicy(PolicyInclude.BINDING_OUTPUT_POLICY,
+ outAxisMessage.getPolicyInclude(), output, fac);
+ operation.addChild(output);
+ writeSoapHeaders(outAxisMessage, fac, output, soap);
+ }
+ }
+
+ // generate fault Messages
+ ArrayList faultyMessages = axisOperation.getFaultMessages();
+ if (faultyMessages != null) {
+ for (int i = 0; i < faultyMessages.size(); i++) {
+ AxisMessage faultyMessge = (AxisMessage) faultyMessages
+ .get(i);
+ OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
+ wsdl);
+ addExtensionElemnet(fac, fault, SOAP_BODY, SOAP_USE, use,
+ "namespace", targetNamespace, soap);
+ fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
+ null);
+// TODO adding policies for fault messages
+ operation.addChild(fault);
+ writeSoapHeaders(faultyMessge, fac, fault, soap);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Generate the bindings
+ */
+ private void generateSOAP12Binding(OMFactory fac, OMElement defintions)
+ throws Exception {
+ OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
+ defintions.addChild(binding);
+ binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+ + SOAP12BINDING_NAME_SUFFIX, null);
+ binding.addAttribute("type", tns.getPrefix() + ":"
+ + axisService.getName() + PORT_TYPE_SUFFIX, null);
+ addPolicy(PolicyInclude.BINDING_POLICY, axisService.getPolicyInclude(),
+ binding, fac);
+
+//Adding ext elements
+ addExtensionElemnet(fac, binding, BINDING_LOCAL_NAME, TRANSPORT,
+ TRANSPORT_URI, STYLE, style, soap12);
+
+ // Add WS-Addressing UsingAddressing element if appropriate
+ // SHOULD be on the binding element per the specification
+ if(axisService.getWSAddressingFlag().equals(AddressingConstants.ADDRESSING_OPTIONAL)){
+ OMNamespace wsawNamespace = fac.createOMNamespace(AddressingConstants.Final.WSAW_NAMESPACE,"wsaw");
+ addExtensionElement(fac, binding, AddressingConstants.USING_ADDRESSING, DEFAULT_WSDL_NAMESPACE_PREFIX+":required", "true", wsawNamespace);
+ } else if(axisService.getWSAddressingFlag().equals(AddressingConstants.ADDRESSING_REQUIRED)){
+ OMNamespace wsawNamespace = fac.createOMNamespace(AddressingConstants.Final.WSAW_NAMESPACE,"wsaw");
+ addExtensionElement(fac, binding, AddressingConstants.USING_ADDRESSING, DEFAULT_WSDL_NAMESPACE_PREFIX+":required", "true", wsawNamespace);
+ }
+
+ Iterator operations = axisService.getOperations();
+ while (operations.hasNext()) {
+ AxisOperation axisOperation = (AxisOperation) operations.next();
+ if (axisOperation.isControlOperation()) {
+ continue;
+ }
+ String opeartionName = axisOperation.getName().getLocalPart();
+ OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+ wsdl);
+ binding.addChild(operation);
+ String soapAction = axisOperation.getSoapAction();
+ if (soapAction == null) {
+ soapAction = "";
+ }
+ addExtensionElemnet(fac, operation, OPERATION_LOCAL_NAME,
+ SOAP_ACTION, soapAction, STYLE, style, soap12);
+ addPolicy(PolicyInclude.BINDING_OPERATION_POLICY, axisOperation
+ .getPolicyInclude(), operation, fac);
+
+ String MEP = axisOperation.getMessageExchangePattern();
+
+ if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage inaxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+ if (inaxisMessage != null) {
+ operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
+ OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
+ wsdl);
+ addExtensionElemnet(fac, input, SOAP_BODY, SOAP_USE, use,
+ "namespace", targetNamespace, soap12);
+ addPolicy(PolicyInclude.BINDING_INPUT_POLICY, inaxisMessage
+ .getPolicyInclude(), input, fac);
+ operation.addChild(input);
+ writeSoapHeaders(inaxisMessage, fac, input, soap12);
+ }
+ }
+
+ if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage outAxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+ if (outAxisMessage != null) {
+ OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
+ wsdl);
+ addExtensionElemnet(fac, output, SOAP_BODY, SOAP_USE, use,
+ "namespace", targetNamespace, soap12);
+ addPolicy(PolicyInclude.BINDING_OUTPUT_POLICY,
+ outAxisMessage.getPolicyInclude(), output, fac);
+ operation.addChild(output);
+ writeSoapHeaders(outAxisMessage, fac, output, soap12);
+ }
+ }
+
+ // generate fault Messages
+ ArrayList faultyMessages = axisOperation.getFaultMessages();
+ if (faultyMessages != null) {
+ for (int i = 0; i < faultyMessages.size(); i++) {
+ AxisMessage faultyMessge = (AxisMessage) faultyMessages
+ .get(i);
+ OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
+ wsdl);
+ addExtensionElemnet(fac, fault, SOAP_BODY, SOAP_USE, use,
+ "namespace", targetNamespace, soap12);
+ fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
+ null);
+// add policies for fault messages
+ operation.addChild(fault);
+ writeSoapHeaders(faultyMessge, fac, fault, soap12);
+ }
+ }
+ }
+ }
+
+ private void generatePostBinding(OMFactory fac, OMElement defintions)
+ throws Exception {
+ OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
+ defintions.addChild(binding);
+ binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+ + HTTP_BINDING, null);
+ binding.addAttribute("type", tns.getPrefix() + ":"
+ + axisService.getName() + PORT_TYPE_SUFFIX, null);
+
+//Adding ext elements
+ OMElement httpBinding = fac.createOMElement("binding", http);
+ binding.addChild(httpBinding);
+ httpBinding.addAttribute("verb", "POST", null);
+
+ Iterator operations = axisService.getOperations();
+ while (operations.hasNext()) {
+ AxisOperation axisOperation = (AxisOperation) operations.next();
+ if (axisOperation.isControlOperation()) {
+ continue;
+ }
+ String opeartionName = axisOperation.getName().getLocalPart();
+ OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+ wsdl);
+ binding.addChild(operation);
+
+ OMElement httpOperation = fac.createOMElement("operation", http);
+ operation.addChild(httpOperation);
+ httpOperation.addAttribute("location", axisOperation.getName()
+ .getLocalPart(), null);
+
+ String MEP = axisOperation.getMessageExchangePattern();
+
+ if (WSDLConstants.MEP_URI_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage inaxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+ if (inaxisMessage != null) {
+ operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
+ OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
+ wsdl);
+ OMElement inputelement = fac.createOMElement("content",
+ mime);
+ input.addChild(inputelement);
+ inputelement.addAttribute("type", "text/xml", null);
+ operation.addChild(input);
+ }
+ }
+
+ if (WSDLConstants.MEP_URI_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_ROBUST_IN_ONLY.equals(MEP)
+ || WSDLConstants.MEP_URI_IN_OUT.equals(MEP)) {
+ AxisMessage outAxisMessage = axisOperation
+ .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+ if (outAxisMessage != null) {
+ OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
+ wsdl);
+ OMElement outElement = fac.createOMElement("content", mime);
+ outElement.addChild(outElement);
+ outElement.addAttribute("type", "text/xml", null);
+ output.addChild(outElement);
+ operation.addChild(output);
+ }
+ }
+ }
+ }
+
+ private void writeSoapHeaders(AxisMessage inaxisMessage, OMFactory fac,
+ OMElement input, OMNamespace soapNameSpace) throws Exception {
+ ArrayList extElementList;
+ extElementList = inaxisMessage.getSoapHeaders();
+ if (extElementList != null) {
+ Iterator elements = extElementList.iterator();
+ while (elements.hasNext()) {
+ SOAPHeaderMessage soapheader = (SOAPHeaderMessage) elements
+ .next();
+ addSOAPHeader(fac, input, soapheader, soapNameSpace);
+ }
+ }
+ }
+
+ private void addExtensionElemnet(OMFactory fac, OMElement element,
+ String name, String att1Name, String att1Value, String att2Name,
+ String att2Value, OMNamespace soapNameSpace) {
+ OMElement soapbinding = fac.createOMElement(name, soapNameSpace);
+ element.addChild(soapbinding);
+ soapbinding.addAttribute(att1Name, att1Value, null);
+ soapbinding.addAttribute(att2Name, att2Value, null);
+ }
+
+ private void addExtensionElement(OMFactory fac, OMElement element,
+ String name, String att1Name, String att1Value,
+ OMNamespace soapNameSpace) {
+ OMElement extElement = fac.createOMElement(name, soapNameSpace);
+ element.addChild(extElement);
+ extElement.addAttribute(att1Name, att1Value, null);
+ }
+
+ private void setDefinitionElement(OMElement defintion) {
+ this.definition = defintion;
+ }
+
+ private OMElement getDefinitionElement() {
+ return definition;
+ }
+
+ private void addSOAPHeader(OMFactory fac, OMElement element,
+ SOAPHeaderMessage header, OMNamespace soapNameSpace) {
+ OMElement extElement = fac.createOMElement("header", soapNameSpace);
+ element.addChild(extElement);
+ String use = header.getUse();
+ if (use != null) {
+ extElement.addAttribute("use", use, null);
+ }
+ if (header.part() != null) {
+ extElement.addAttribute("part", header.part(), null);
+ }
+ if (header.getMessage() != null) {
+ extElement.addAttribute("message", getPrefix(targetNamespace) + ":"
+ + header.getMessage().getLocalPart(), null);
+ }
+ }
+
+ private String getPrefix(String targetNameSpace) {
+ Map map = axisService.getNameSpacesMap();
+ Iterator keys = map.keySet().iterator();
+ while (keys.hasNext()) {
+ String key = (String) keys.next();
+ if (map.get(key).equals(targetNameSpace)) {
+ return key;
+ }
+ }
+ return null;
+ }
+
+ private void addPolicy(int type, PolicyInclude policyInclude,
+ OMElement element, OMFactory factory) throws Exception {
+ ArrayList elementList = policyInclude.getPolicyElements(type);
+ StAXPolicyWriter pwrt = (StAXPolicyWriter) PolicyFactory
+ .getPolicyWriter(PolicyFactory.StAX_POLICY_WRITER);
+
+ for (Iterator iterator = elementList.iterator(); iterator.hasNext();) {
+ Object policyElement = iterator.next();
+
+ if (policyElement instanceof Policy) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ pwrt.writePolicy((Policy) policyElement, baos);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos
+ .toByteArray());
+ element.addChild(OMXMLBuilderFactory.createStAXOMBuilder(
+ factory,
+ StAXUtils.createXMLStreamReader(
+ bais)).getDocumentElement());
+
+ } else if (policyElement instanceof PolicyReference) {
+ OMNamespace ns = factory.createOMNamespace(PolicyConstants.WS_POLICY_NAMESPACE_URI, PolicyConstants.WS_POLICY_PREFIX);
+ OMElement refElement = factory.createOMElement(PolicyConstants.WS_POLICY_REFERENCE, ns);
+ String policyURIString = ((PolicyReference) policyElement).getPolicyURIString();
+ OMAttribute attribute = factory.createOMAttribute("URI", null, policyURIString);
+ refElement.addAttribute(attribute);
+ element.addChild(refElement);
+
+ PolicyRegistry reg = policyInclude.getPolicyRegistry();
+ Policy p = reg.lookup(policyURIString);
+
+ if(p == null) {
+ throw new Exception("Policy not found for uri : " + policyURIString);
+ }
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ pwrt.writePolicy(p, baos);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos
+ .toByteArray());
+ getDefinitionElement().addChild(OMXMLBuilderFactory.createStAXOMBuilder(
+ factory,
+ StAXUtils.createXMLStreamReader(
+ bais)).getDocumentElement());
+
+ // TODO refactor this ..
+
+ }
+
+ }
+ }
}
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/WSDL2AxisServiceBuilder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/WSDL2AxisServiceBuilder.java?rev=405857&r1=405856&r2=405857&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/WSDL2AxisServiceBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/WSDL2AxisServiceBuilder.java Fri May 12 13:17:55 2006
@@ -2,6 +2,7 @@
import com.ibm.wsdl.extensions.soap.SOAPConstants;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.namespace.Constants;
import org.apache.axis2.util.XMLUtils;
import org.apache.axis2.wsdl.SOAPHeaderMessage;
@@ -1054,6 +1055,17 @@
addPolicyRef(description, originOfExtensibilityElements,
policyRef);
+ } else if(AddressingConstants.Final.WSAW_USING_ADDRESSING.equals(unknown.getElementType()) ||
+ AddressingConstants.Submission.WSAW_USING_ADDRESSING.equals(unknown.getElementType())){
+ // Read the wsaw:UsingAddressing flag from the WSDL. It is only valid on the Port or Binding
+ // so only recognise it as en extensibility elemtn of one of those.
+ if(originOfExtensibilityElements.equals(PORT) || originOfExtensibilityElements.equals(BINDING)){
+ if(Boolean.TRUE.equals(unknown.getRequired())){
+ axisService.setWSAddressingFlag(AddressingConstants.ADDRESSING_REQUIRED);
+ }else{
+ axisService.setWSAddressingFlag(AddressingConstants.ADDRESSING_OPTIONAL);
+ }
+ }
} else {
//TODO : we are ignored that.
}
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java?rev=405857&r1=405856&r2=405857&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java Fri May 12 13:17:55 2006
@@ -120,6 +120,30 @@
}
}
+ /*
+ * Check that if the wsaddressing="required" attribute exists on the service
+ * definition or <wsaw:UsingAddressing wsdl:required="true" /> was found in the
+ * WSDL that WS-Addressing headers were found on the inbound message
+ */
+ private void checkUsingAddressing(MessageContext msgContext)
+ throws AxisFault {
+ String addressingFlag = msgContext.getAxisService().getWSAddressingFlag();
+ if(log.isTraceEnabled())
+ log.trace("checkUsingAddressing: WSAddressingFlag="+ addressingFlag);
+ if (AddressingConstants.ADDRESSING_REQUIRED.equals(addressingFlag)) {
+ Object flag = msgContext.getProperty(AddressingConstants.WS_ADDRESSING_VERSION);
+ if(log.isTraceEnabled())
+ log.trace("checkUsingAddressing: WS_ADDRESSING_VERSION=" + flag);
+ if (flag == null) {
+ String message = Messages.getMessage("wsaddressingrequirednotpresent");
+ AxisFault af = new AxisFault(message);
+ af.printStackTrace();
+ log.debug(message, af);
+ throw af;
+ }
+ }
+ }
+
/**
* This method is called to handle any error that occurs at inflow or outflow. But if the
* method is called twice, it implies that sending the error handling has failed, in which case
@@ -448,6 +472,8 @@
// invoke the Message Receivers
checkMustUnderstand(msgContext);
+
+ checkUsingAddressing(msgContext);
MessageReceiver receiver = msgContext.getAxisOperation().getMessageReceiver();
Modified: webservices/axis2/trunk/java/xdocs/tools/1_0/CodegenToolReference.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/tools/1_0/CodegenToolReference.html?rev=405857&r1=405856&r2=405857&view=diff
==============================================================================
--- webservices/axis2/trunk/java/xdocs/tools/1_0/CodegenToolReference.html (original)
+++ webservices/axis2/trunk/java/xdocs/tools/1_0/CodegenToolReference.html Fri May 12 13:17:55 2006
@@ -254,7 +254,7 @@
the command line tool</td>
</tr>
<tr>
- <td>generateserverxml</td>
+ <td>generateservicexml</td>
<td>Generates server side code (i.e. skeletons). Only true and false
are applicable as values. Default is false. Maps to the -sd option of
the command line tool.</td>
@@ -300,7 +300,7 @@
wsdlfilename="C:\test\wsdl\CombinedService.wsdl"
output="C:\"
serverside="true"
- generateserverxml="true"/>
+ generateservicexml="true"/>
</target>
</project></pre>