/******************************************************************************* * 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.communication.protocol.soap.generator; import java.io.IOException; import org.ws4d.java.DPWSFramework; import org.ws4d.java.communication.CommunicationBinding; import org.ws4d.java.communication.CommunicationManager; import org.ws4d.java.communication.CommunicationUtil; import org.ws4d.java.communication.ProtocolData; import org.ws4d.java.configuration.FrameworkProperties; import org.ws4d.java.constants.ConstantsHelper; import org.ws4d.java.constants.MEXConstants; import org.ws4d.java.constants.SOAPConstants; import org.ws4d.java.constants.WSAConstants; import org.ws4d.java.constants.WSDConstants; import org.ws4d.java.constants.WSEConstants; import org.ws4d.java.constants.XMLConstants; import org.ws4d.java.eventing.EventSink; import org.ws4d.java.io.xml.ElementHandler; import org.ws4d.java.io.xml.ElementHandlerRegistry; import org.ws4d.java.io.xml.XmlSerializer; import org.ws4d.java.message.FaultMessage; import org.ws4d.java.message.InvokeMessage; import org.ws4d.java.message.Message; import org.ws4d.java.message.SOAPHeader; import org.ws4d.java.message.discovery.ByeMessage; import org.ws4d.java.message.discovery.HelloMessage; import org.ws4d.java.message.discovery.ProbeMatch; import org.ws4d.java.message.discovery.ProbeMatchesMessage; import org.ws4d.java.message.discovery.ProbeMessage; import org.ws4d.java.message.discovery.ResolveMatch; import org.ws4d.java.message.discovery.ResolveMatchesMessage; import org.ws4d.java.message.discovery.ResolveMessage; import org.ws4d.java.message.eventing.GetStatusMessage; import org.ws4d.java.message.eventing.GetStatusResponseMessage; import org.ws4d.java.message.eventing.RenewMessage; import org.ws4d.java.message.eventing.RenewResponseMessage; import org.ws4d.java.message.eventing.SubscribeMessage; import org.ws4d.java.message.eventing.SubscribeResponseMessage; import org.ws4d.java.message.eventing.SubscriptionEndMessage; import org.ws4d.java.message.eventing.UnsubscribeMessage; import org.ws4d.java.message.eventing.UnsubscribeResponseMessage; import org.ws4d.java.message.metadata.GetMessage; import org.ws4d.java.message.metadata.GetMetadataMessage; import org.ws4d.java.message.metadata.GetMetadataResponseMessage; import org.ws4d.java.message.metadata.GetResponseMessage; import org.ws4d.java.service.parameter.ParameterValue; import org.ws4d.java.structures.ArrayList; import org.ws4d.java.structures.DataStructure; import org.ws4d.java.structures.HashMap; import org.ws4d.java.structures.HashMap.Entry; import org.ws4d.java.structures.Iterator; import org.ws4d.java.structures.List; import org.ws4d.java.types.AppSequence; import org.ws4d.java.types.AttributedURI; import org.ws4d.java.types.CustomizeMData; import org.ws4d.java.types.CustomizeMDataHandler; import org.ws4d.java.types.Delivery; import org.ws4d.java.types.DiscoveryData; import org.ws4d.java.types.EndpointReference; import org.ws4d.java.types.EndpointReferenceSet; import org.ws4d.java.types.EprInfo; import org.ws4d.java.types.Filter; import org.ws4d.java.types.HostMData; import org.ws4d.java.types.HostedMData; import org.ws4d.java.types.LocalizedString; import org.ws4d.java.types.MetadataMData; import org.ws4d.java.types.ProbeScopeSet; import org.ws4d.java.types.QName; import org.ws4d.java.types.QNameSet; import org.ws4d.java.types.ReferenceParametersMData; import org.ws4d.java.types.ReferenceParametersMData.ReferenceParameter; import org.ws4d.java.types.RelationshipMData; import org.ws4d.java.types.ScopeSet; import org.ws4d.java.types.ThisDeviceMData; import org.ws4d.java.types.ThisModelMData; import org.ws4d.java.types.URI; import org.ws4d.java.types.URISet; import org.ws4d.java.types.UnknownDataContainer; import org.ws4d.java.types.XAddressInfoSet; import org.ws4d.java.util.Log; import org.ws4d.java.util.SerializeUtil; import org.xmlpull.v1.IllegalStateException; class DefaultMessageSerializer extends MessageSerializer { public static final int MAX_QNAME_SERIALIZATION = 10; public void serialize(HelloMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Canonicalize and serialize this element if (DPWSFramework.hasModule(DPWSFramework.SECURITY_MODULE)) serializer.attribute("", "ID", "BID1"); // Start-Tag serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_HELLO); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Discovery Data adden serialize(message.getDiscoveryData(), serializer, helper); // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_HELLO); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(ByeMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Canonicalize and serialize this element if (DPWSFramework.hasModule(DPWSFramework.SECURITY_MODULE)) serializer.attribute("", "ID", "BID1"); // Start-Tag serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_BYE); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Discovery Data adden serialize(message.getDiscoveryData(), serializer, helper); // Adds UnknownElements serializeUnknownElements(serializer, message); // END-Tag serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_BYE); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(ProbeMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_PROBE); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); QNameSet types = message.getTypes(); // QNameSet types if (types != null) { serialize(types, serializer, helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_TYPES); } ProbeScopeSet scopes = message.getScopes(); // ScopeSet scopes if (scopes != null) { serialize(scopes, serializer, helper.getWSDNamespace()); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_PROBE); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(ProbeMatchesMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Canonicalize and serialize this element if (DPWSFramework.hasModule(DPWSFramework.SECURITY_MODULE)) serializer.attribute("", "ID", "BID1"); // Start-Tag serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_PROBEMATCHES); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Adds ProbeMatch Elements DataStructure matches = message.getProbeMatches(); if (matches != null && !message.isEmpty()) { for (Iterator it = matches.iterator(); it.hasNext();) { ProbeMatch probeMatch = (ProbeMatch) it.next(); serialize(probeMatch, serializer, helper); } } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_PROBEMATCHES); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(InvokeMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); ParameterValue parameters = message.getContent(); if (parameters != null) { parameters.serialize(serializer); } // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(GetStatusMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_GETSTATUS); // Do Nothing because its in the specification defined // End-Tag serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_GETSTATUS); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(GetStatusResponseMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_GETSTATUSRESPONSE); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Expires String expires = message.getExpires(); if (expires != null && !(expires.equals(""))) { SerializeUtil.serializeTag(serializer, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_EXPIRES, expires); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_GETSTATUSRESPONSE); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(RenewMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_RENEW); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Expires String expires = message.getExpires(); if (expires != null && !(expires.equals(""))) { SerializeUtil.serializeTag(serializer, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_EXPIRES, expires); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_RENEW); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(RenewResponseMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_RENEWRESPONSE); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); String expires = message.getExpires(); // Expires if (expires != null && !(expires.equals(""))) { SerializeUtil.serializeTag(serializer, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_EXPIRES, expires); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_RENEWRESPONSE); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(SubscribeMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_SUBSCRIBE); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // EndTo EndpointReference endTo = message.getEndTo(); if (endTo != null) { serialize(endTo, serializer, helper, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_ENDTO); } Delivery delivery = message.getDelivery(); EventSink eventSink = message.getEventSink(); // Delivery if (delivery != null) { if (eventSink != null) { URI notifyToAddress = null; for (Iterator it = eventSink.getBindings(); it.hasNext();) { CommunicationBinding binding = (CommunicationBinding) it.next(); URI address = binding.getTransportAddress(); if (protocolData.sourceMatches(address)) { if (FrameworkProperties.REFERENCE_PARAM_MODE) { notifyToAddress = address; } else { notifyToAddress = (URI) address.clone(); notifyToAddress.setFragmentEncoded(delivery.getNotifyTo().getReferenceParameters().getWseIdentifier()); } break; } if (!it.hasNext()) { notifyToAddress = address; if (Log.isWarn()) { Log.warn("No appropriate local address found for event notification, fallbacking to: " + notifyToAddress); } } } delivery.setNotifyTo(new EndpointReference(notifyToAddress, delivery.getNotifyTo().getReferenceParameters())); } serialize(delivery, serializer, helper); } // Expires String expires = message.getExpires(); if (expires != null && !(expires.equals(""))) { SerializeUtil.serializeTag(serializer, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_EXPIRES, expires); } // Filter Filter filter = message.getFilter(); if (filter != null) { serialize(filter, serializer, helper); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_SUBSCRIBE); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(SubscribeResponseMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_SUBSCRIBERESPONSE); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Subscripton Manager EndpointReference subscriptionManager = message.getSubscriptionManager(); if (subscriptionManager != null) { if (!FrameworkProperties.REFERENCE_PARAM_MODE) { } serialize(subscriptionManager, serializer, helper, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_SUBSCRIPTIONMANAGER); } // Expires String expires = message.getExpires(); if (expires != null && !(expires.equals(""))) { SerializeUtil.serializeTag(serializer, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_EXPIRES, expires); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_SUBSCRIBERESPONSE); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(SubscriptionEndMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_SUBSCRIPTIONEND); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Subscripton Manager EndpointReference subscriptionManager = message.getSubscriptionManager(); if (subscriptionManager != null) { serialize(subscriptionManager, serializer, helper, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_SUBSCRIPTIONMANAGER); } // Status URI status = message.getStatus(); if (status != null) { SerializeUtil.serializeTag(serializer, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_STATUS, status.toString()); } LocalizedString reason = message.getReason(); // Reason if (reason != null) { SerializeUtil.serializeTagWithAttribute(serializer, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_REASON, reason.getValue(), XMLConstants.XML_NAMESPACE_NAME, XMLConstants.XML_ATTRIBUTE_LANGUAGE, reason.getLanguage()); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_SUBSCRIPTIONEND); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(UnsubscribeMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_UNSUBSCRIBE); // Do Nothing because its in the specification defined // End-Tag serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_UNSUBSCRIBE); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(UnsubscribeResponseMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(GetMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(GetResponseMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATA); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // ThisModelMData adden ThisModelMData thisModel = message.getThisModel(); if (thisModel != null) { serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); serializer.attribute(null, MEXConstants.WSX_ELEM_DIALECT, helper.getMetadataDialectThisModel()); serialize(thisModel, serializer, helper); serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); } // ThisDeviceMData adden ThisDeviceMData thisDevice = message.getThisDevice(); if (thisDevice != null) { serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); serializer.attribute(null, MEXConstants.WSX_ELEM_DIALECT, helper.getMetadataDialectThisDevice()); serialize(thisDevice, serializer, helper); serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); } // RelationshipMData adden RelationshipMData relationship = message.getRelationship(); if (relationship != null) { serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); serializer.attribute(null, MEXConstants.WSX_ELEM_DIALECT, helper.getMetatdataDialectRelationship()); serialize(relationship, serializer, helper); serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); } // if a user has add customize metadata they will be serialize. CustomizeMData mdata = message.getCustomMdataInstance(); if (mdata != null) { serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); // System.out.println(mdata); HashMap handler = ElementHandlerRegistry.getRegistry().getAllElementHandler(); if (!handler.isEmpty()) { Iterator it = handler.keySet().iterator(); while (it.hasNext()) { QName key = (QName) it.next(); Object value = handler.get(key); // check if the user has an own ElementHandler // if not a generic handler will serialize the data ElementHandler customHandler = ElementHandlerRegistry.getRegistry().getElementHandler(key); if (customHandler.equals(null)) { customHandler.serializeElement(serializer, key, value); } else CustomizeMDataHandler.getInstance().serializeElement(serializer, CustomizeMData.CUSTOM, mdata.getUnknownElements()); } } serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATA); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(GetMetadataMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_GETMETADATA); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Dialect adden URI dialect = message.getDialect(); if (dialect != null) { SerializeUtil.serializeTag(serializer, MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_DIALECT, (dialect.toString() == null ? "" : dialect.toString())); } // Identifier adden URI identifier = message.getIdentifier(); if (identifier != null) { SerializeUtil.serializeTag(serializer, MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_IDENTIFIER, (identifier.toString() == null ? "" : identifier.toString())); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_GETMETADATA); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(GetMetadataResponseMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start Tag serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATA); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); EndpointReferenceSet metadataReferences = message.getMetadataReferences(); if (metadataReferences != null) { for (Iterator it = metadataReferences.iterator(); it.hasNext();) { EndpointReference ref = (EndpointReference) it.next(); // Start MetadataSection for WSDL serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); // Dialect adden serializer.attribute(null, MEXConstants.WSX_ELEM_DIALECT, MEXConstants.WSX_DIALECT_WSDL); // EndpointReference(s) adden serialize(ref, serializer, helper, MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATAREFERENCE); // End Tag serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); } } URISet metadataLocations = message.getMetadataLocations(); if (metadataLocations != null) { for (Iterator it = metadataLocations.iterator(); it.hasNext();) { URI location = (URI) it.next(); // Start MetadataSection for WSDL serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); // Dialect adden serializer.attribute(null, MEXConstants.WSX_ELEM_DIALECT, MEXConstants.WSX_DIALECT_WSDL); // URI(s) adden SerializeUtil.serializeTag(serializer, MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_LOCATION, (location.toString() == null ? "" : location.toString())); // End Tag serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); } } // Start MetadataSection for Relationship serializer.startTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); // RelationshipMData adden serializer.attribute(null, MEXConstants.WSX_ELEM_DIALECT, helper.getMetatdataDialectRelationship()); RelationshipMData r = message.getRelationship(); if (r != null) { serialize(r, serializer, helper); } // End Tags serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATASECTION); // Adds UnknownElements serializeUnknownElements(serializer, message); serializer.endTag(MEXConstants.WSX_NAMESPACE_NAME, MEXConstants.WSX_ELEM_METADATA); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(ResolveMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Start-Tag serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_RESOLVE); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Add the EPR EndpointReference endpointReference = message.getEndpointReference(); if (endpointReference != null) { serialize(endpointReference, serializer, helper, helper.getWSANamespace(), WSAConstants.WSA_ELEM_ENDPOINT_REFERENCE); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_RESOLVE); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(ResolveMatchesMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(message, protocolData); // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Canonicalize and serialize this element if (DPWSFramework.hasModule(DPWSFramework.SECURITY_MODULE)) serializer.attribute("", "ID", "BID1"); // Start-Tag serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_RESOLVEMATCHES); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Adds ResolveMatch Elements ResolveMatch match = message.getResolveMatch(); if (match != null) { serialize(match, serializer, helper); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_RESOLVEMATCHES); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(ResolveMatch match, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_RESOLVEMATCH); // Adds UnknownAttributes serializeUnknownAttributes(serializer, match); // Discovery Data adden serialize((DiscoveryData) match, serializer, helper); // Adds UnknownElements serializeUnknownElements(serializer, match); serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_RESOLVEMATCH); } public void serialize(FaultMessage message, XmlSerializer serializer, ProtocolData protocolData) throws IOException { // ################## Body-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); // Fault-StartTag serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_FAULT); // Adds UnknownAttributes serializeUnknownAttributes(serializer, message); // Code QName code = message.getCode(); if (code != null) { serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_CODE); // Valueelement serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_VALUE); String prefix = serializer.getPrefix(code.getNamespace(), true); serializer.text(prefix + ":" + code.getLocalPart()); serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_VALUE); // Subcode QName subcode = message.getSubcode(); if (subcode != null) { serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_SUBCODE); // Valueelement serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_VALUE); String prefix1 = serializer.getPrefix(subcode.getNamespace(), true); serializer.text(prefix1 + ":" + subcode.getLocalPart()); serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_VALUE); // Subsubcode QName subsubcode = message.getSubsubcode(); if (subsubcode != null) { serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_SUBCODE); // Valueelement serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_VALUE); String prefix2 = serializer.getPrefix(subsubcode.getNamespace(), true); serializer.text(prefix2 + ":" + subsubcode.getLocalPart()); serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_VALUE); serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_SUBCODE); } serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_SUBCODE); } serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_CODE); } // Reason DataStructure reason = message.getReason(); if (reason != null) { ArrayList list = (ArrayList) reason; serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_REASON); for (Iterator it = list.iterator(); it.hasNext();) { LocalizedString string = (LocalizedString) it.next(); SerializeUtil.serializeTagWithAttribute(serializer, SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_TEXT, string.getValue(), XMLConstants.XML_NAMESPACE_NAME, XMLConstants.XML_ATTRIBUTE_LANGUAGE, string.getLanguage()); } serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_REASON); } ParameterValue detail = message.getDetail(); if (detail != null) { serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_DETAIL); detail.serialize(serializer); serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_DETAIL); } // Adds UnknownElements serializeUnknownElements(serializer, message); // End-Tag serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_FAULT); // ################## BODY-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_BODY); } public void serialize(SOAPHeader header, XmlSerializer serializer, ProtocolData protocolData) throws IOException { ConstantsHelper helper = getConstantsHelper(header, protocolData); // prerequisite namespaces for copied reference parameters => optional ReferenceParametersMData params = header.getReferenceParameters(); if (params != null) { serializeNamespacePrefixes(params, serializer); } // ################## Header-StartTag ################## serializer.startTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_HEADER); // Adds UnknownAttributes to Header Tag if exists serializeUnknownAttributes(serializer, header); // Action-Tag => mandatory header.getAction().serialize(serializer, helper.getWSANamespace(), WSAConstants.WSA_ELEM_ACTION); // MessageID-Tag => optional if (header.getMessageId() != null) { header.getMessageId().serialize(serializer, helper.getWSANamespace(), WSAConstants.WSA_ELEM_MESSAGE_ID); } // relatesTo-Tag => optional if (header.getRelatesTo() != null) { header.getRelatesTo().serialize(serializer, helper.getWSANamespace(), WSAConstants.WSA_ELEM_RELATESTO); } // replyTo-Tag => optional if (header.getReplyTo() != null) { serialize(header.getReplyTo(), serializer, helper, helper.getWSANamespace(), WSAConstants.WSA_ELEM_REPLY_TO); } // To-Tag => optional if (header.getTo() != null) { header.getTo().serialize(serializer, helper.getWSANamespace(), WSAConstants.WSA_ELEM_TO); } // copied reference parameters => optional if (params != null && !params.isEmpty()) { serialize(params, serializer, helper, true); } // AppSequence-Tag => optional if (header.getAppSequence() != null) { serialize(header.getAppSequence(), serializer, helper); } // Adds UnknownElements to Header if exists serializeUnknownElements(serializer, header); // ################## Header-EndTag ################## serializer.endTag(SOAPConstants.SOAP12_NAMESPACE_NAME, SOAPConstants.SOAP_ELEM_HEADER); } /* Serialize unkown data container */ private void serializeUnknownElements(XmlSerializer serializer, UnknownDataContainer container) throws IOException { HashMap unknownElements_QN_2_List = container.getUnknownElements(); if (unknownElements_QN_2_List != null) { for (Iterator it = unknownElements_QN_2_List.entrySet().iterator(); it.hasNext();) { HashMap.Entry ent = (Entry) it.next(); QName qname = (QName) ent.getKey(); serializer.unknownElements(qname, (List) ent.getValue()); } } } private void serializeUnknownAttributes(XmlSerializer serializer, UnknownDataContainer container) throws IOException { HashMap unknownAttributes = container.getUnknownAttributes(); if (unknownAttributes != null) { for (Iterator it = unknownAttributes.entrySet().iterator(); it.hasNext();) { HashMap.Entry ent = (Entry) it.next(); QName qname = (QName) ent.getKey(); String value = (String) ent.getValue(); serializer.attribute(qname.getNamespace(), qname.getLocalPart(), value); } } } private void serialize(ProbeMatch match, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_PROBEMATCH); // Adds UnknownAttributes serializeUnknownAttributes(serializer, match); // Discovery Data adden serialize((DiscoveryData) match, serializer, helper); // Adds UnknownElements serializeUnknownElements(serializer, match); serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_PROBEMATCH); } private void serialize(DiscoveryData data, XmlSerializer serializer, ConstantsHelper helper) throws IOException { // Endpointreference EndpointReference endpointReference = data.getEndpointReference(); serialize(endpointReference, serializer, helper, helper.getWSANamespace(), WSAConstants.WSA_ELEM_ENDPOINT_REFERENCE); // QNameSet Types QNameSet types = data.getTypes(); if (types != null) { serialize(types, serializer, helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_TYPES); } // ScopeSet scopes ScopeSet scopes = data.getScopes(); if (scopes != null) { serialize(scopes, serializer, helper.getWSDNamespace()); } // URISet xAddress XAddressInfoSet xAddrs = data.getXAddressInfoSet(); if (xAddrs != null) { serialize(xAddrs, serializer, helper.getWSDNamespace()); } // MetadataVersion long metadataVersion = data.getMetadataVersion(); if (metadataVersion >= 1) { SerializeUtil.serializeTag(serializer, helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_METADATAVERSION, ("" + metadataVersion)); } // Adds UnknownElements to Header if exists serializeUnknownElements(serializer, data); } private void serialize(AppSequence sequence, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_APPSEQUENCE); // Adds UnknownAttributes serializeUnknownAttributes(serializer, sequence); long instanceId = sequence.getInstanceId(); if (instanceId >= 1) { serializer.attribute(null, WSDConstants.WSD_ATTR_INSTANCEID, "" + instanceId); } long messageNumber = sequence.getMessageNumber(); if (messageNumber >= 1) { serializer.attribute(null, WSDConstants.WSD_ATTR_MESSAGENUMBER, "" + messageNumber); } String sequenceId = sequence.getSequenceId(); if (sequenceId != null) { serializer.attribute(null, WSDConstants.WSD_ATTR_SEQUENCEID, "" + sequenceId); } // Adds UnknownElements serializeUnknownElements(serializer, sequence); serializer.endTag(helper.getWSDNamespace(), WSDConstants.WSD_ELEMENT_APPSEQUENCE); } private void serialize(EndpointReference ref, XmlSerializer serializer, ConstantsHelper helper, String namespace, String elementName) throws IOException { // Start-Tag serializer.startTag(namespace, elementName); // Adds UnknownAttributes to EPR Tag if exists serializeUnknownAttributes(serializer, ref); // Address Element AttributedURI address = ref.getAddress(); address.serialize(serializer, helper.getWSANamespace(), WSAConstants.WSA_ELEM_ADDRESS); // ReferenceParameters Element ReferenceParametersMData referenceParameters = ref.getReferenceParameters(); if (referenceParameters != null && !referenceParameters.isEmpty()) { serializer.startTag(helper.getWSANamespace(), WSAConstants.WSA_ELEM_REFERENCE_PARAMETERS); serializeNamespacePrefixes(referenceParameters, serializer); serializeUnknownAttributes(serializer, referenceParameters); // fake in order to dump reference parameter prefixes serializer.text(""); serialize(referenceParameters, serializer, helper, false); serializer.endTag(helper.getWSANamespace(), WSAConstants.WSA_ELEM_REFERENCE_PARAMETERS); } // Metadata Element MetadataMData endpointMetadata = ref.getEndpointMetadata(); if (endpointMetadata != null) { serializer.startTag(helper.getWSANamespace(), WSAConstants.WSA_ELEM_METADATA); serializeUnknownAttributes(serializer, endpointMetadata); serializeUnknownElements(serializer, endpointMetadata); serializer.endTag(helper.getWSANamespace(), WSAConstants.WSA_ELEM_METADATA); } // Adds UnknownElements to EPR if exists serializeUnknownElements(serializer, ref); serializer.endTag(namespace, elementName); } private void serialize(Delivery delivery, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_DELIVERY); // Adds UnknownAttributes serializeUnknownAttributes(serializer, delivery); // Add the DeliveryMode URI mode = delivery.getMode(); if (mode != null) { serializer.attribute(null, WSEConstants.WSE_ATTR_DELIVERY_MODE, mode.toString()); } EndpointReference notifyTo = delivery.getNotifyTo(); // Add the EPR serialize(notifyTo, serializer, helper, WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_NOTIFYTO); // Adds UnknownElements serializeUnknownElements(serializer, delivery); serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_DELIVERY); } private void serialize(Filter filter, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_FILTER); // Adds UnknownAttributes serializeUnknownAttributes(serializer, filter); URI dialect = filter.getDialect(); if (dialect != null) { serializer.attribute(null, WSEConstants.WSE_ATTR_FILTER_DIALECT, dialect.toString()); } URISet actions = filter.getActions(); if (actions != null) { for (Iterator it = actions.iterator(); it.hasNext();) { URI uri = (URI) it.next(); serializer.text(uri.toString()); if (it.hasNext()) { serializer.text(" "); } } } // Adds UnknownElements serializeUnknownElements(serializer, filter); serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_FILTER); } private void serialize(HostedMData data, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(helper.getDPWSNamespace(), helper.getDPWSElementRelationshipHosted()); // Adds UnknownAttributes serializeUnknownAttributes(serializer, data); // Endpoint References for (Iterator it = data.getEprInfoSet().iterator(); it.hasNext();) { EprInfo epr = (EprInfo) it.next(); serialize(epr.getEndpointReference(), serializer, helper, helper.getWSANamespace(), WSAConstants.WSA_ELEM_ENDPOINT_REFERENCE); } // ServiceTypes QNameSet types = data.getTypes(); if (types != null) { serialize(types, serializer, helper.getDPWSNamespace(), helper.getDPWSElementTypes()); } // Add ServiceID URI serviceId = data.getServiceId(); if (serviceId != null) { SerializeUtil.serializeTag(serializer, helper.getDPWSNamespace(), helper.getDPWSElementServiceId(), (serviceId == null ? null : serviceId.toString())); } // Adds UnknownElements serializeUnknownElements(serializer, data); serializer.endTag(helper.getDPWSNamespace(), helper.getDPWSElementRelationshipHosted()); } private void serialize(HostMData data, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(helper.getDPWSNamespace(), helper.getDPWSElementRelationshipHost()); // Adds UnknownAttributes serializeUnknownAttributes(serializer, data); // Add the EPR of Host EndpointReference endpoint = data.getEndpointReference(); if (endpoint != null) { serialize(endpoint, serializer, helper, helper.getWSANamespace(), WSAConstants.WSA_ELEM_ENDPOINT_REFERENCE); } // Add the Service Types of Host QNameSet types = data.getTypes(); if (types != null) { serialize(types, serializer, helper.getDPWSNamespace(), helper.getDPWSElementTypes()); } // Adds UnknownElements serializeUnknownElements(serializer, data); serializer.endTag(helper.getDPWSNamespace(), helper.getDPWSElementRelationshipHost()); } private void serialize(ReferenceParametersMData data, XmlSerializer serializer, ConstantsHelper helper, boolean withinHeader) throws IOException { // any XML special chars should remain unescaped String wseIdentifier = data.getWseIdentifier(); if (wseIdentifier != null && FrameworkProperties.REFERENCE_PARAM_MODE) { serializer.startTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_IDENTIFIER); if (withinHeader) { serializer.attribute(helper.getWSANamespace(), WSAConstants.WSA_ATTR_IS_REFERENCE_PARAMETER, "true"); } serializer.text(wseIdentifier == null ? "" : wseIdentifier); serializer.endTag(WSEConstants.WSE_NAMESPACE_NAME, WSEConstants.WSE_ELEM_IDENTIFIER); } else { // we need this to close the preceding element tag serializer.text(""); } serializeUnknownElements(serializer, data); ReferenceParameter[] allParameters = data.getParameters(); for (int i = 0; i < allParameters.length; i++) { ReferenceParameter parameter = allParameters[i]; serializer.plainText("<"); String prefix = serializer.getPrefix(parameter.getNamespace(), true); serializer.plainText(prefix); serializer.plainText(":"); serializer.plainText(parameter.getName()); // add wsa:IsReferenceParameter if withinHeader == true if (withinHeader) { serializer.plainText(" "); prefix = serializer.getPrefix(helper.getWSANamespace(), true); serializer.plainText(prefix); serializer.plainText(":"); serializer.plainText(WSAConstants.WSA_ATTR_IS_REFERENCE_PARAMETER); serializer.plainText("=\"true\""); } String[] chunks = parameter.getChunks(); for (int j = 0; j < chunks.length; j++) { if (j % 2 == 0) { serializer.plainText(chunks[j]); } else { prefix = serializer.getPrefix(chunks[j], true); serializer.plainText(prefix); } } } } private void serializeNamespacePrefixes(ReferenceParametersMData data, XmlSerializer serializer) { ReferenceParameter[] allParameters = data.getParameters(); for (int i = 0; i < allParameters.length; i++) { ReferenceParameter parameter = allParameters[i]; String[] chunks = parameter.getChunks(); for (int j = 1; j < chunks.length; j += 2) { serializer.getPrefix(chunks[j], true); } } } private void serialize(RelationshipMData data, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { // StartTag => dpws:Relationship serializer.startTag(helper.getDPWSNamespace(), helper.getDPWSElementRelationship()); serializer.attribute(null, helper.getDPWSAttributeRelationshipType(), helper.getMetadataRelationshipHostingType()); // Adds UnknownAttributes serializeUnknownAttributes(serializer, data); // Host HostMData host = data.getHost(); if (host != null) { serialize(host, serializer, helper); } // Hosted DataStructure hosted = data.getHosted(); if (hosted != null) { for (Iterator it = hosted.iterator(); it.hasNext();) { HostedMData hostedData = (HostedMData) it.next(); serialize(hostedData, serializer, helper); } } // Adds UnknownElements serializeUnknownElements(serializer, data); // EndTag => dpws:Relationship serializer.endTag(helper.getDPWSNamespace(), helper.getDPWSElementRelationship()); } private void serialize(ThisDeviceMData data, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { LocalizedString value = null; // StartTag => dpws:thisModel serializer.startTag(helper.getDPWSNamespace(), helper.getDPWSElementThisDevice()); // Adds UnknownAttributes serializeUnknownAttributes(serializer, data); // FriendlyName => 1 -> * DataStructure friendlyNames = data.getFriendlyNames(); if (friendlyNames == null || friendlyNames.size() == 0) { Log.warn("Message2SOAPGenerator.addThisDevice: No friendly name defined within device"); } else { for (Iterator it = friendlyNames.iterator(); it.hasNext();) { value = (LocalizedString) it.next(); SerializeUtil.serializeTagWithAttribute(serializer, helper.getDPWSNamespace(), helper.getDPWSElementFriendlyName(), value.getValue(), XMLConstants.XML_NAMESPACE_NAME, XMLConstants.XML_ATTRIBUTE_LANGUAGE, value.getLanguage()); } } // FirmwareVersion => 0 -> 1 String firmwareVersion = data.getFirmwareVersion(); if (firmwareVersion != null && !(firmwareVersion.equals(""))) { SerializeUtil.serializeTag(serializer, helper.getDPWSNamespace(), helper.getDPWSElementFirmwareVersion(), firmwareVersion); } // SerialNumber => 0 -> 1 String serialNumber = data.getSerialNumber(); if (serialNumber != null && !(serialNumber.equals(""))) { SerializeUtil.serializeTag(serializer, helper.getDPWSNamespace(), helper.getDPWSElementSerialnumber(), serialNumber); } // Adds UnknownElements serializeUnknownElements(serializer, data); // EndTag => dpws:thisModel serializer.endTag(helper.getDPWSNamespace(), helper.getDPWSElementThisDevice()); } private void serialize(ThisModelMData data, XmlSerializer serializer, ConstantsHelper helper) throws IllegalArgumentException, IllegalStateException, IOException { LocalizedString value = null; // StartTag => dpws:thisModel serializer.startTag(helper.getDPWSNamespace(), helper.getDPWSElementThisModel()); // Adds UnknownAttributes serializeUnknownAttributes(serializer, data); // Manufacturer => 1 -> * DataStructure manufacturer = data.getManufacturerNames(); for (Iterator it = manufacturer.iterator(); it.hasNext();) { value = (LocalizedString) it.next(); SerializeUtil.serializeTagWithAttribute(serializer, helper.getDPWSNamespace(), helper.getDPWSElementManufacturer(), value.getValue(), XMLConstants.XML_NAMESPACE_NAME, XMLConstants.XML_ATTRIBUTE_LANGUAGE, value.getLanguage()); } // ManufaturerURL => 0 -> 1 URI manufacturerURL = data.getManufacturerUrl(); if (manufacturerURL != null && !(manufacturerURL.toString().equals(""))) { SerializeUtil.serializeTag(serializer, helper.getDPWSNamespace(), helper.getDPWSElementManufacturerURL(), (manufacturerURL.toString() == null ? "" : manufacturerURL.toString())); } // ModelName => 1 -> * value = null; DataStructure modelNames = data.getModelNames(); if (modelNames == null || modelNames.size() == 0) { Log.warn("Message2SOAPGenerator.addThisModel: No model name defined within device"); } else { for (Iterator it = modelNames.iterator(); it.hasNext();) { value = (LocalizedString) it.next(); SerializeUtil.serializeTagWithAttribute(serializer, helper.getDPWSNamespace(), helper.getDPWSElementModelName(), value.getValue(), XMLConstants.XML_NAMESPACE_NAME, XMLConstants.XML_ATTRIBUTE_LANGUAGE, value.getLanguage()); } } // ModelNumber => 0 -> 1 String modelNumber = data.getModelNumber(); if (modelNumber != null && !(modelNumber.equals(""))) { SerializeUtil.serializeTag(serializer, helper.getDPWSNamespace(), helper.getDPWSElementModelNumber(), (modelNumber == null ? "" : modelNumber)); } // ModelUrl => 0 -> 1 URI modelUrl = data.getModelUrl(); if (modelUrl != null && !(modelUrl.toString().equals(""))) { SerializeUtil.serializeTag(serializer, helper.getDPWSNamespace(), helper.getDPWSElementModelURL(), (modelUrl.toString() == null ? "" : modelUrl.toString())); } // PresentationUrl => 0 -> 1 URI presURL = data.getPresentationUrl(); if (presURL != null && !(presURL.toString().equals(""))) { SerializeUtil.serializeTag(serializer, helper.getDPWSNamespace(), helper.getDPWSElementPresentationURL(), (presURL.toString() == null ? "" : presURL.toString())); } // Adds UnknownElements serializeUnknownElements(serializer, data); // EndTag => dpws:thisModel serializer.endTag(helper.getDPWSNamespace(), helper.getDPWSElementThisModel()); } private void serialize(QNameSet qnames, XmlSerializer serializer, String namespace, String element) throws IllegalArgumentException, IllegalStateException, IOException { QName[] qns = qnames.toArray(); if (qns == null) return; int max = qns.length; if (qns.length > 0) { for (int j = 0; j < max; j++) { String prefix = serializer.getPrefix(qns[j].getNamespace(), false); if (prefix == null || prefix.equals("")) { serializer.setPrefix(qns[j].getPrefix(), qns[j].getNamespace()); } } serializer.startTag(namespace, element); for (int j = 0; j < max; j++) { String prefix = serializer.getPrefix(qns[j].getNamespace(), false); if (prefix != null && !prefix.equals("")) { serializer.text(prefix + ":" + qns[j].getLocalPart()); } else { serializer.text(qns[j].getLocalPart()); } if (j < max) { serializer.text(" "); } } serializer.endTag(namespace, element); } } private void serialize(ProbeScopeSet scopes, XmlSerializer serializer, String namespace) throws IOException { if (!scopes.isEmpty()) { serializer.startTag(namespace, WSDConstants.WSD_ELEMENT_SCOPES); String matchBy = scopes.getMatchBy(); if (matchBy != null) { serializer.attribute(namespace, WSDConstants.WSD_ATTR_MATCH_BY, matchBy); } HashMap unknownAttributes = scopes.getUnknownAttributes(); if (unknownAttributes != null && !(unknownAttributes.isEmpty())) { for (Iterator it = unknownAttributes.entrySet().iterator(); it.hasNext();) { HashMap.Entry ent = (Entry) it.next(); QName qname = (QName) ent.getKey(); String value = (String) ent.getValue(); serializer.attribute(qname.getNamespace(), qname.getLocalPart(), value); } } serializer.text(scopes.getScopesAsString()); serializer.endTag(namespace, WSDConstants.WSD_ELEMENT_SCOPES); } } private void serialize(ScopeSet scopes, XmlSerializer serializer, String namespace) throws IOException { if (!scopes.isEmpty()) { serializer.startTag(namespace, WSDConstants.WSD_ELEMENT_SCOPES); HashMap unknownAttributes = scopes.getUnknownAttributes(); if (unknownAttributes != null && !(unknownAttributes.isEmpty())) { for (Iterator it = unknownAttributes.entrySet().iterator(); it.hasNext();) { HashMap.Entry ent = (Entry) it.next(); QName qname = (QName) ent.getKey(); String value = (String) ent.getValue(); serializer.attribute(qname.getNamespace(), qname.getLocalPart(), value); } } serializer.text(scopes.getScopesAsString()); serializer.endTag(namespace, WSDConstants.WSD_ELEMENT_SCOPES); } } private void serialize(URISet uris, XmlSerializer serializer, String namespace) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(namespace, WSDConstants.WSD_ELEMENT_XADDRS); serializer.text(uris.toString() == null ? "" : uris.toString()); serializer.endTag(namespace, WSDConstants.WSD_ELEMENT_XADDRS); } private void serialize(XAddressInfoSet xAdrInfoSet, XmlSerializer serializer, String namespace) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(namespace, WSDConstants.WSD_ELEMENT_XADDRS); serializer.text(xAdrInfoSet.toString() == null ? "" : xAdrInfoSet.toString()); serializer.endTag(namespace, WSDConstants.WSD_ELEMENT_XADDRS); } private ConstantsHelper getConstantsHelper(Message message, ProtocolData protocolData) { return getConstantsHelper(message.getHeader(), protocolData); } private ConstantsHelper getConstantsHelper(SOAPHeader header, ProtocolData protocolData) { if (protocolData == null) { return null; } CommunicationManager comMan = DPWSFramework.getCommunicationManager(protocolData.getCommunicationManagerId()); CommunicationUtil comUtil = comMan.getCommunicationUtil(); ConstantsHelper helper = comUtil.getHelper(header.getProtocolInfo().getVersion()); return helper; } }