@Override public Item parse(XmlPullParser parser, int initialDepth) throws Exception { String id = parser.getAttributeValue(null, "id"); String node = parser.getAttributeValue(null, "node"); String xmlns = parser.getNamespace(); ItemNamespace itemNamespace = ItemNamespace.fromXmlns(xmlns); int tag = parser.next(); if (tag == XmlPullParser.END_TAG) { return new Item(itemNamespace, id, node); } else { String payloadElemName = parser.getName(); String payloadNS = parser.getNamespace(); final ExtensionElementProvider<ExtensionElement> extensionProvider = ProviderManager.getExtensionProvider(payloadElemName, payloadNS); if (extensionProvider == null) { // TODO: Should we use StandardExtensionElement in this case? And probably remove SimplePayload all together. CharSequence payloadText = PacketParserUtils.parseElement(parser, true); return new PayloadItem<>(itemNamespace, id, node, new SimplePayload(payloadText.toString())); } else { return new PayloadItem<>(itemNamespace, id, node, extensionProvider.parse(parser)); } } }
@Test public void simplePayloadTest() { String xmlPayload = "<element xmlns='https://example.org'><foo>Test</foo><bar/></element>"; SimplePayload simplePayload = new SimplePayload(xmlPayload); assertEquals("element", simplePayload.getElementName()); assertEquals("https://example.org", simplePayload.getNamespace()); assertEquals(xmlPayload, simplePayload.toXML(null)); } }
@Test public void verifyPayloadItem() throws Exception { SimplePayload payload = new SimplePayload("<data xmlns='https://example.org'>This is the payload</data>"); PayloadItem<SimplePayload> simpleItem = new PayloadItem<>(payload); String simpleCtrl = "<item xmlns='http://jabber.org/protocol/pubsub'>" + payload.toXML(null) + "</item>"; assertXMLEqual(simpleCtrl, simpleItem.toXML(null).toString()); PayloadItem<SimplePayload> idItem = new PayloadItem<>("uniqueid", payload); String idCtrl = "<item xmlns='http://jabber.org/protocol/pubsub' id='uniqueid'>" + payload.toXML(null) + "</item>"; assertXMLEqual(idCtrl, idItem.toXML(null).toString()); PayloadItem<SimplePayload> itemWithNodeId = new PayloadItem<>("testId", "testNode", payload); String nodeIdCtrl = "<item xmlns='http://jabber.org/protocol/pubsub' id='testId' node='testNode'>" + payload.toXML(null) + "</item>"; assertXMLEqual(nodeIdCtrl, itemWithNodeId.toXML(null).toString()); }
@Override public String toString() { return getClass().getName() + "payload [" + toXML(null) + "]"; } }
@Test public void parseSimplePayloadItem() throws Exception { String itemContent = "<foo xmlns='smack:test'>Some text</foo>"; XmlPullParser parser = PacketParserUtils.getParserFor( "<message from='pubsub.myserver.com' to='francisco@denmark.lit' id='foo'>" + "<event xmlns='http://jabber.org/protocol/pubsub#event'>" + "<items node='testNode'>" + "<item id='testid1' >" + itemContent + "</item>" + "</items>" + "</event>" + "</message>"); Stanza message = PacketParserUtils.parseMessage(parser); ExtensionElement eventExt = message.getExtension(PubSubNamespace.event.getXmlns()); EventElement event = (EventElement) eventExt; NamedElement itemExt = ((ItemsExtension) event.getExtensions().get(0)).items.get(0); assertTrue(itemExt instanceof PayloadItem<?>); PayloadItem<?> item = (PayloadItem<?>) itemExt; assertEquals("testid1", item.getId()); assertTrue(item.getPayload() instanceof SimplePayload); SimplePayload payload = (SimplePayload) item.getPayload(); assertEquals("foo", payload.getElementName()); assertEquals("smack:test", payload.getNamespace()); assertXMLEqual(itemContent, payload.toXML(null).toString()); }
@Override public String toString() { return getClass().getName() + "payload [" + toXML() + "]"; } }
assertEquals("entry", payload.getElementName()); assertEquals("http://www.w3.org/2005/Atom", payload.getNamespace()); assertXMLEqual(itemContent, payload.toXML(null).toString());
SimplePayload payload = new SimplePayload("book", "pubsub:test:book", "");
@Override public String toString() { return getClass().getName() + "payload [" + toXML() + "]"; } }
SimplePayload payload = new SimplePayload("book", "pubsub:test:book", "<book xmlns='pubsub:test:book'>Romeo and Juliet</book>");
@Override public String toString() { return getClass().getName() + "payload [" + toXML() + "]"; } }
body.append("</geoloc>"); SimplePayload payload = new SimplePayload( "geoloc", "http://jabber.org/protocol/geoloc",
SimplePayload payload = new SimplePayload(SLICE_LIST,ORCA_SLICELIST_NS, "<orca xmlns='" + ORCA_SLICELIST_NS + "'>" + "<sliceList>" + sliceListString + "</sliceList>" + "</orca>");
return new PayloadItem<SimplePayload>(id, node, new SimplePayload(payloadElemName, payloadNS, payloadText.toString())); } else {
tag = parser.next(); return new PayloadItem<SimplePayload>(id, node, new SimplePayload(payloadElemName, payloadNS, payloadText.toString()));
tag = parser.next(); return new PayloadItem<SimplePayload>(id, node, new SimplePayload(payloadElemName, payloadNS, payloadText.toString()));
/** * Publish manifest document * @param nodePath - path to node * @param manifest - serialized manifest */ public synchronized void publishManifest(String nodePath, String manifest) { if ((xmppCon == null) || (!xmppCon.isConnected())) login(); LeafNode ln = getLeafNode(nodePath); if (ln == null) { logger.error("Unable to publish measurement: node does not exist"); return; } SimplePayload payload = new SimplePayload(ORCA_PLD_ROOT,ORCA_PLD_NS, "<orca xmlns='" + ORCA_PLD_NS + "'>" + manifest + "</orca>"); String itemId = String.valueOf(System.currentTimeMillis()); PayloadItem<SimplePayload> item = new PayloadItem<SimplePayload>(itemId, payload); try { ln.send(item); } catch (XMPPException e) { logger.error("Unable to publish measurement: " + e); } }