public NamespaceContextMap createDefaultNamespaceContext(String... optionalPrefixes) { NamespaceContextMap ctx = new NamespaceContextMap() { @Override protected String getDefaultNamespaceURI() { return MessageDOM.NAMESPACE_URI; } }; for (String optionalPrefix : optionalPrefixes) { ctx.put(optionalPrefix, MessageDOM.NAMESPACE_URI); } return ctx; }
@Override public DescMeta<Document> getInstance() { return super.getInstance(); }
protected void readBodyElement(XmlPullParser xpp) throws Exception { XmlPullParserUtils.searchTag(xpp, "Body"); }
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); ELEMENT el = ELEMENT.valueOrNullOf(localName); if (el == null) return; startElement(el, attributes); }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); ELEMENT el = ELEMENT.valueOrNullOf(localName); if (el == null) return; endElement(el); }
public void readBody(ActionRequestMessage requestMessage, ActionInvocation actionInvocation) throws UnsupportedDataException { String body = getMessageBody(requestMessage); try { XmlPullParser xpp = XmlPullParserUtils.createParser(body); readBodyRequest(xpp, requestMessage, actionInvocation); } catch (Exception ex) { throw new UnsupportedDataException("Can't transform message payload: " + ex, ex, body); } }
public MessageElement createRoot(XPath xpath, String element) { super.createRoot(element); return getRoot(xpath); }
public XPath createXPath() { return super.createXPath(createDefaultNamespaceContext(MessageElement.XPATH_PREFIX)); }
protected void generateEventedValue(EventedValue eventedValue, Document descriptor, Element parentElement) { String name = eventedValue.getName(); Map.Entry<String, String>[] attributes = eventedValue.getAttributes(); if (attributes != null && attributes.length > 0) { Element evElement = appendNewElement(descriptor, parentElement, name); for (Map.Entry<String, String> attr : attributes) { evElement.setAttribute(attr.getKey(), DOMParser.escape(attr.getValue())); } } }
public void readBody(ActionRequestMessage requestMessage, ActionInvocation actionInvocation) throws UnsupportedDataException { try { super.readBody(requestMessage, actionInvocation); } catch (UnsupportedDataException ex) { // Can't recover from this if (!requestMessage.isBodyNonEmptyString()) throw ex; log.warning("Trying to recover from invalid SOAP XML request: " + ex); String body = getMessageBody(requestMessage); // TODO: UPNP VIOLATION: TwonkyMobile sends unencoded '&' in SetAVTransportURI action calls: // <CurrentURI>http://192.168.1.14:56923/content/12a470d854dbc6887e4103e3140783fd.wav?profile_id=0&convert=wav</CurrentURI> String fixedBody = XmlPullParserUtils.fixXMLEntities(body); try { // Try again, if this fails, we are done... requestMessage.setBody(fixedBody); super.readBody(requestMessage, actionInvocation); } catch (UnsupportedDataException ex2) { handleInvalidMessage(actionInvocation, ex, ex2); } } }
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); ELEMENT el = ELEMENT.valueOrNullOf(localName); if (el == null) return; startElement(el, attributes); }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); ELEMENT el = ELEMENT.valueOrNullOf(localName); if (el == null) return; endElement(el); }
public void readBody(IncomingEventRequestMessage requestMessage) throws UnsupportedDataException { log.fine("Reading body of: " + requestMessage); if (log.isLoggable(Level.FINER)) { log.finer("===================================== GENA BODY BEGIN ============================================"); log.finer(requestMessage.getBody() != null ? requestMessage.getBody().toString() : null); log.finer("-===================================== GENA BODY END ============================================"); } String body = getMessageBody(requestMessage); try { XmlPullParser xpp = XmlPullParserUtils.createParser(body); readProperties(xpp, requestMessage); } catch (Exception ex) { throw new UnsupportedDataException("Can't transform message payload: " + ex.getMessage(), ex, body); } }
protected void readBodyRequest(XmlPullParser xpp, ActionRequestMessage requestMessage, ActionInvocation actionInvocation) throws Exception { XmlPullParserUtils.searchTag(xpp, actionInvocation.getAction().getName()); readActionInputArguments(xpp, actionInvocation); }
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); Element newEl = getInstance().getMetadata().createElementNS(uri, qName); for (int i = 0; i < attributes.getLength(); i++) { newEl.setAttributeNS( attributes.getURI(i), attributes.getQName(i), attributes.getValue(i) ); } current.appendChild(newEl); current = newEl; }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); getInstance().setValue(getCharacters()); }
public void readBody(ActionResponseMessage responseMsg, ActionInvocation actionInvocation) throws UnsupportedDataException { String body = getMessageBody(responseMsg); try { XmlPullParser xpp = XmlPullParserUtils.createParser(body); readBodyElement(xpp); readBodyResponse(xpp, actionInvocation); } catch (Exception ex) { throw new UnsupportedDataException("Can't transform message payload: " + ex, ex, body); } }
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if (!DIDLContent.NAMESPACE_URI.equals(uri)) return; if (localName.equals("container")) { Container container = createContainer(attributes); getInstance().addContainer(container); createContainerHandler(container, this); } else if (localName.equals("item")) { Item item = createItem(attributes); getInstance().addItem(item); createItemHandler(item, this); } else if (localName.equals("desc")) { DescMeta desc = createDescMeta(attributes); getInstance().addDescMetadata(desc); createDescMetaHandler(desc, this); } }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if (isLastElement(uri, localName, qName)) return; // Ignore whitespace if (getCharacters().length() > 0 && !getCharacters().matches("[\\t\\n\\x0B\\f\\r\\s]+")) current.appendChild(getInstance().getMetadata().createTextNode(getCharacters())); current = (Element) current.getParentNode(); // Reset this so we can continue parsing child nodes with this handler characters = new StringBuilder(); attributes = null; }
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if (CONSTANTS.InstanceID.equals(localName)) { String valAttr = attributes.getValue(CONSTANTS.val.name()); if (valAttr != null) { InstanceID instanceID = new InstanceID(new UnsignedIntegerFourBytes(valAttr)); getInstance().getInstanceIDs().add(instanceID); new InstanceIDHandler(instanceID, this); } } } }