src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/MemberSubmissionAddressingExtensionHandler.java

changeset 368
0989ad8c0860
parent 286
f50545b5e2f1
child 637
9c07ef4934dd
     1.1 --- a/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/MemberSubmissionAddressingExtensionHandler.java	Thu Apr 04 19:05:24 2013 -0700
     1.2 +++ b/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/MemberSubmissionAddressingExtensionHandler.java	Tue Apr 09 14:51:13 2013 +0100
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -27,23 +27,35 @@
    1.11  
    1.12  import com.sun.tools.internal.ws.api.wsdl.TWSDLExtensible;
    1.13  import com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext;
    1.14 +import com.sun.tools.internal.ws.resources.ModelerMessages;
    1.15 +import com.sun.tools.internal.ws.resources.WsdlMessages;
    1.16 +import com.sun.tools.internal.ws.util.xml.XmlUtil;
    1.17  import com.sun.tools.internal.ws.wscompile.ErrorReceiver;
    1.18 +import com.sun.tools.internal.ws.wsdl.document.Fault;
    1.19 +import com.sun.tools.internal.ws.wsdl.document.Input;
    1.20 +import com.sun.tools.internal.ws.wsdl.document.Output;
    1.21 +import com.sun.xml.internal.ws.addressing.W3CAddressingMetadataConstants;
    1.22  import com.sun.xml.internal.ws.api.addressing.AddressingVersion;
    1.23  import org.w3c.dom.Element;
    1.24 +import org.xml.sax.Locator;
    1.25  
    1.26  import javax.xml.namespace.QName;
    1.27  import java.util.Map;
    1.28  
    1.29 +import static com.sun.xml.internal.ws.addressing.v200408.MemberSubmissionAddressingConstants.WSA_ACTION_QNAME;
    1.30 +
    1.31  /**
    1.32   * @author Arun Gupta
    1.33   */
    1.34  public class MemberSubmissionAddressingExtensionHandler extends W3CAddressingExtensionHandler {
    1.35 -    public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap) {
    1.36 -        super(extensionHandlerMap);
    1.37 -    }
    1.38  
    1.39 -    public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap, ErrorReceiver env) {
    1.40 +    private ErrorReceiver errReceiver;
    1.41 +    private boolean extensionModeOn;
    1.42 +
    1.43 +    public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap, ErrorReceiver env, boolean extensionModeOn) {
    1.44          super(extensionHandlerMap, env);
    1.45 +        this.errReceiver = env;
    1.46 +        this.extensionModeOn = extensionModeOn;
    1.47      }
    1.48  
    1.49      @Override
    1.50 @@ -61,4 +73,67 @@
    1.51          return false;
    1.52      }
    1.53  
    1.54 +    @Override
    1.55 +    public boolean handleInputExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) {
    1.56 +        if (extensionModeOn) {
    1.57 +            warn(context.getLocation(e));
    1.58 +            String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME);
    1.59 +            if (actionValue == null || actionValue.equals("")) {
    1.60 +                return warnEmptyAction(parent, context.getLocation(e));
    1.61 +            }
    1.62 +            ((Input) parent).setAction(actionValue);
    1.63 +            return true;
    1.64 +        } else {
    1.65 +            return fail(context.getLocation(e));
    1.66 +        }
    1.67 +    }
    1.68 +
    1.69 +    private boolean fail(Locator location) {
    1.70 +        errReceiver.warning(location,
    1.71 +                ModelerMessages.WSDLMODELER_INVALID_IGNORING_MEMBER_SUBMISSION_ADDRESSING(
    1.72 +                        AddressingVersion.MEMBER.nsUri, W3CAddressingMetadataConstants.WSAM_NAMESPACE_NAME));
    1.73 +        return false;
    1.74 +    }
    1.75 +
    1.76 +    private void warn(Locator location) {
    1.77 +        errReceiver.warning(location,
    1.78 +                ModelerMessages.WSDLMODELER_WARNING_MEMBER_SUBMISSION_ADDRESSING_USED(
    1.79 +                        AddressingVersion.MEMBER.nsUri, W3CAddressingMetadataConstants.WSAM_NAMESPACE_NAME));
    1.80 +    }
    1.81 +
    1.82 +    @Override
    1.83 +    public boolean handleOutputExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) {
    1.84 +        if (extensionModeOn) {
    1.85 +            warn(context.getLocation(e));
    1.86 +            String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME);
    1.87 +            if (actionValue == null || actionValue.equals("")) {
    1.88 +                return warnEmptyAction(parent, context.getLocation(e));
    1.89 +            }
    1.90 +            ((Output) parent).setAction(actionValue);
    1.91 +            return true;
    1.92 +        } else {
    1.93 +            return fail(context.getLocation(e));
    1.94 +        }
    1.95 +    }
    1.96 +
    1.97 +    @Override
    1.98 +    public boolean handleFaultExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) {
    1.99 +        if (extensionModeOn) {
   1.100 +            warn(context.getLocation(e));
   1.101 +            String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME);
   1.102 +            if (actionValue == null || actionValue.equals("")) {
   1.103 +                errReceiver.warning(context.getLocation(e), WsdlMessages.WARNING_FAULT_EMPTY_ACTION(parent.getNameValue(), parent.getWSDLElementName().getLocalPart(), parent.getParent().getNameValue()));
   1.104 +                return false; // keep compiler happy
   1.105 +            }
   1.106 +            ((Fault) parent).setAction(actionValue);
   1.107 +            return true;
   1.108 +        } else {
   1.109 +            return fail(context.getLocation(e));
   1.110 +        }
   1.111 +    }
   1.112 +
   1.113 +    private boolean warnEmptyAction(TWSDLExtensible parent, Locator pos) {
   1.114 +        errReceiver.warning(pos, WsdlMessages.WARNING_INPUT_OUTPUT_EMPTY_ACTION(parent.getWSDLElementName().getLocalPart(), parent.getParent().getNameValue()));
   1.115 +        return false;
   1.116 +    }
   1.117  }

mercurial