This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener). # Fixed URLs ## Fixed But Review Recommended These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended. * [ ] http://developer.marklogic.com/express (301) with 1 occurrences migrated to: /free-developer ([https](https://developer.marklogic.com/express) result IllegalArgumentException). * [ ] http://opensmpp.logica.com/CommonPart/Download/download2.html (301) with 1 occurrences migrated to: https://public.cgi.com/CommonPart/Download/download2.html ([https](https://opensmpp.logica.com/CommonPart/Download/download2.html) result SSLHandshakeException). * [ ] http://0.0.0.0:2379 (AnnotatedConnectException) with 2 occurrences migrated to: https://0.0.0.0:2379 ([https](https://0.0.0.0:2379) result AnnotatedConnectException). * [ ] http://en.wikipedia.org/wiki/Zip_%28file_format%29 (301) with 1 occurrences migrated to: https://en.wikipedia.org/wiki/Zip_%2528file_format%2529 ([https](https://en.wikipedia.org/wiki/Zip_%28file_format%29) result 400). * [ ] http://build.spring.io/plugins/servlet/buildStatusImage/INTEXT-ZIP (301) with 1 occurrences migrated to: https://build.spring.io/plugins/servlet/buildStatusImage/INTEXT-ZIP ([https](https://build.spring.io/plugins/servlet/buildStatusImage/INTEXT-ZIP) result 404). * [ ] http://docs.hazelcast.org/docs/latest/manual/html/continuousquery.html (301) with 1 occurrences migrated to: https://docs.hazelcast.org/docs/latest/manual/html/continuousquery.html ([https](https://docs.hazelcast.org/docs/latest/manual/html/continuousquery.html) result 404). * [ ] http://docs.hazelcast.org/docs/latest/manual/html/distributed-data-structures.html (301) with 1 occurrences migrated to: https://docs.hazelcast.org/docs/latest/manual/html/distributed-data-structures.html ([https](https://docs.hazelcast.org/docs/latest/manual/html/distributed-data-structures.html) result 404). * [ ] http://docs.hazelcast.org/docs/latest/manual/html/distributedevents.html (301) with 1 occurrences migrated to: https://docs.hazelcast.org/docs/latest/manual/html/distributedevents.html ([https](https://docs.hazelcast.org/docs/latest/manual/html/distributedevents.html) result 404). * [ ] http://docs.hazelcast.org/docs/latest/manual/html/distributedquery.html (301) with 1 occurrences migrated to: https://docs.hazelcast.org/docs/latest/manual/html/distributedquery.html ([https](https://docs.hazelcast.org/docs/latest/manual/html/distributedquery.html) result 404). * [ ] http://docs.spring.io/spring-integration/reference/html/system-management-chapter.html (301) with 3 occurrences migrated to: https://docs.spring.io/spring-integration/reference/html/system-management-chapter.html ([https](https://docs.spring.io/spring-integration/reference/html/system-management-chapter.html) result 404). * [ ] http://docs.spring.io/spring-integration/reference/html/xmpp.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-integration/reference/html/xmpp.html ([https](https://docs.spring.io/spring-integration/reference/html/xmpp.html) result 404). * [ ] http://help.github.com/send-pull-requests (404) with 1 occurrences migrated to: https://help.github.com/send-pull-requests ([https](https://help.github.com/send-pull-requests) result 404). * [ ] http://www.springframework.org/schema/integration/hazelcast/spring-integration-hazelcast.xsd (404) with 1 occurrences migrated to: https://www.springframework.org/schema/integration/hazelcast/spring-integration-hazelcast.xsd ([https](https://www.springframework.org/schema/integration/hazelcast/spring-integration-hazelcast.xsd) result 404). * [ ] http://www.springframework.org/schema/integration/jgroups/spring-intergration-jgroups.xsd (404) with 3 occurrences migrated to: https://www.springframework.org/schema/integration/jgroups/spring-intergration-jgroups.xsd ([https](https://www.springframework.org/schema/integration/jgroups/spring-intergration-jgroups.xsd) result 404). * [ ] http://www.springframework.org/schema/integration/print/spring-integration-print.xsd (404) with 1 occurrences migrated to: https://www.springframework.org/schema/integration/print/spring-integration-print.xsd ([https](https://www.springframework.org/schema/integration/print/spring-integration-print.xsd) result 404). * [ ] http://www.springframework.org/schema/integration/twitter/spring-integration-social-twitter.xsd (404) with 1 occurrences migrated to: https://www.springframework.org/schema/integration/twitter/spring-integration-social-twitter.xsd ([https](https://www.springframework.org/schema/integration/twitter/spring-integration-social-twitter.xsd) result 404). * [ ] http://www.springframework.org/schema/integration/voldemort/spring-integration-voldemort.xsd (404) with 2 occurrences migrated to: https://www.springframework.org/schema/integration/voldemort/spring-integration-voldemort.xsd ([https](https://www.springframework.org/schema/integration/voldemort/spring-integration-voldemort.xsd) result 404). * [ ] http://search.twitter.com/operators (410) with 1 occurrences migrated to: https://search.twitter.com/operators ([https](https://search.twitter.com/operators) result 410). ## Fixed Success These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended. * [ ] http://aws.amazon.com/ with 1 occurrences migrated to: https://aws.amazon.com/ ([https](https://aws.amazon.com/) result 200). * [ ] http://aws.amazon.com/s3/ with 1 occurrences migrated to: https://aws.amazon.com/s3/ ([https](https://aws.amazon.com/s3/) result 200). * [ ] http://docs.oracle.com/javase/6/docs/api/javax/print/DocFlavor.html with 3 occurrences migrated to: https://docs.oracle.com/javase/6/docs/api/javax/print/DocFlavor.html ([https](https://docs.oracle.com/javase/6/docs/api/javax/print/DocFlavor.html) result 200). * [ ] http://docs.oracle.com/javase/6/docs/api/javax/print/PrintService.html with 1 occurrences migrated to: https://docs.oracle.com/javase/6/docs/api/javax/print/PrintService.html ([https](https://docs.oracle.com/javase/6/docs/api/javax/print/PrintService.html) result 200). * [ ] http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/Attribute.html with 1 occurrences migrated to: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/Attribute.html ([https](https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/Attribute.html) result 200). * [ ] http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Chromaticity.html with 1 occurrences migrated to: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Chromaticity.html ([https](https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Chromaticity.html) result 200). * [ ] http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Copies.html with 1 occurrences migrated to: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Copies.html ([https](https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Copies.html) result 200). * [ ] http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaSizeName.html with 1 occurrences migrated to: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaSizeName.html ([https](https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaSizeName.html) result 200). * [ ] http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaTray.html with 1 occurrences migrated to: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaTray.html ([https](https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/MediaTray.html) result 200). * [ ] http://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Sides.html with 1 occurrences migrated to: https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Sides.html ([https](https://docs.oracle.com/javase/6/docs/api/javax/print/attribute/standard/Sides.html) result 200). * [ ] http://docs.oracle.com/javase/6/docs/technotes/guides/jps/index.html with 2 occurrences migrated to: https://docs.oracle.com/javase/6/docs/technotes/guides/jps/index.html ([https](https://docs.oracle.com/javase/6/docs/technotes/guides/jps/index.html) result 200). * [ ] http://docs.splunk.com/Documentation/Splunk/latest/Data/Monitornetworkports with 1 occurrences migrated to: https://docs.splunk.com/Documentation/Splunk/latest/Data/Monitornetworkports ([https](https://docs.splunk.com/Documentation/Splunk/latest/Data/Monitornetworkports) result 200). * [ ] http://docs.spring.io/spring-integration/reference/ with 4 occurrences migrated to: https://docs.spring.io/spring-integration/reference/ ([https](https://docs.spring.io/spring-integration/reference/) result 200). * [ ] http://docs.spring.io/spring-integration/reference/html/ with 1 occurrences migrated to: https://docs.spring.io/spring-integration/reference/html/ ([https](https://docs.spring.io/spring-integration/reference/html/) result 200). * [ ] http://en.wikipedia.org/wiki/Server_Message_Block with 4 occurrences migrated to: https://en.wikipedia.org/wiki/Server_Message_Block ([https](https://en.wikipedia.org/wiki/Server_Message_Block) result 200). * [ ] http://en.wikipedia.org/wiki/Short_Message_Peer-to-Peer with 2 occurrences migrated to: https://en.wikipedia.org/wiki/Short_Message_Peer-to-Peer ([https](https://en.wikipedia.org/wiki/Short_Message_Peer-to-Peer) result 200). * [ ] http://en.wikipedia.org/wiki/Short_Message_Service with 1 occurrences migrated to: https://en.wikipedia.org/wiki/Short_Message_Service ([https](https://en.wikipedia.org/wiki/Short_Message_Service) result 200). * [ ] http://en.wikipedia.org/wiki/Short_message_service_center with 1 occurrences migrated to: https://en.wikipedia.org/wiki/Short_message_service_center ([https](https://en.wikipedia.org/wiki/Short_message_service_center) result 200). * [ ] http://en.wikipedia.org/wiki/XML_database with 1 occurrences migrated to: https://en.wikipedia.org/wiki/XML_database ([https](https://en.wikipedia.org/wiki/XML_database) result 200). * [ ] http://en.wikipedia.org/wiki/XPath_2.0 with 1 occurrences migrated to: https://en.wikipedia.org/wiki/XPath_2.0 ([https](https://en.wikipedia.org/wiki/XPath_2.0) result 200). * [ ] http://en.wikipedia.org/wiki/XQuery with 3 occurrences migrated to: https://en.wikipedia.org/wiki/XQuery ([https](https://en.wikipedia.org/wiki/XQuery) result 200). * [ ] http://en.wikipedia.org/wiki/XQuery_API_for_Java with 1 occurrences migrated to: https://en.wikipedia.org/wiki/XQuery_API_for_Java ([https](https://en.wikipedia.org/wiki/XQuery_API_for_Java) result 200). * [ ] http://gradle.org with 1 occurrences migrated to: https://gradle.org ([https](https://gradle.org) result 200). * [ ] http://hazelcast.org/ with 1 occurrences migrated to: https://hazelcast.org/ ([https](https://hazelcast.org/) result 200). * [ ] http://hillert.blogspot.com/2011/12/java-print-service-frustrations.html with 1 occurrences migrated to: https://hillert.blogspot.com/2011/12/java-print-service-frustrations.html ([https](https://hillert.blogspot.com/2011/12/java-print-service-frustrations.html) result 200). * [ ] http://jcp.org/aboutJava/communityprocess/final/jsr225/index.html with 1 occurrences migrated to: https://jcp.org/aboutJava/communityprocess/final/jsr225/index.html ([https](https://jcp.org/aboutJava/communityprocess/final/jsr225/index.html) result 200). * [ ] http://kafka.apache.org/ with 1 occurrences migrated to: https://kafka.apache.org/ ([https](https://kafka.apache.org/) result 200). * [ ] http://maven.apache.org/ with 2 occurrences migrated to: https://maven.apache.org/ ([https](https://maven.apache.org/) result 200). * [ ] http://mqtt.org/ with 2 occurrences migrated to: https://mqtt.org/ ([https](https://mqtt.org/) result 200). * [ ] http://oauth.net with 2 occurrences migrated to: https://oauth.net ([https](https://oauth.net) result 200). * [ ] http://projects.spring.io/spring-social-twitter/ with 2 occurrences migrated to: https://projects.spring.io/spring-social-twitter/ ([https](https://projects.spring.io/spring-social-twitter/) result 200). * [ ] http://spring.io with 4 occurrences migrated to: https://spring.io ([https](https://spring.io) result 200). * [ ] http://spring.io/ with 4 occurrences migrated to: https://spring.io/ ([https](https://spring.io/) result 200). * [ ] http://stackoverflow.com/faq with 2 occurrences migrated to: https://stackoverflow.com/faq ([https](https://stackoverflow.com/faq) result 200). * [ ] http://stackoverflow.com/questions/3725662/what-is-the-earliest-timestamp-value-that-is-supported-in-zip-file-format with 2 occurrences migrated to: https://stackoverflow.com/questions/3725662/what-is-the-earliest-timestamp-value-that-is-supported-in-zip-file-format ([https](https://stackoverflow.com/questions/3725662/what-is-the-earliest-timestamp-value-that-is-supported-in-zip-file-format) result 200). * [ ] http://stackoverflow.com/questions/tagged/spring-integration with 2 occurrences migrated to: https://stackoverflow.com/questions/tagged/spring-integration ([https](https://stackoverflow.com/questions/tagged/spring-integration) result 200). * [ ] http://vimeo.com/34436402 with 1 occurrences migrated to: https://vimeo.com/34436402 ([https](https://vimeo.com/34436402) result 200). * [ ] http://wiki.apache.org/cassandra/HintedHandoff with 1 occurrences migrated to: https://wiki.apache.org/cassandra/HintedHandoff ([https](https://wiki.apache.org/cassandra/HintedHandoff) result 200). * [ ] http://wiki.apache.org/cassandra/Operations with 3 occurrences migrated to: https://wiki.apache.org/cassandra/Operations ([https](https://wiki.apache.org/cassandra/Operations) result 200). * [ ] http://wiki.apache.org/cassandra/StorageConfiguration with 1 occurrences migrated to: https://wiki.apache.org/cassandra/StorageConfiguration ([https](https://wiki.apache.org/cassandra/StorageConfiguration) result 200). * [ ] http://www.apache.org with 11 occurrences migrated to: https://www.apache.org ([https](https://www.apache.org) result 200). * [ ] http://www.html5rocks.com/en/tutorials/websockets/basics/ with 1 occurrences migrated to: https://www.html5rocks.com/en/tutorials/websockets/basics/ ([https](https://www.html5rocks.com/en/tutorials/websockets/basics/) result 200). * [ ] http://www.nowsms.com/long-sms-text-messages-and-the-160-character-limit with 1 occurrences migrated to: https://www.nowsms.com/long-sms-text-messages-and-the-160-character-limit ([https](https://www.nowsms.com/long-sms-text-messages-and-the-160-character-limit) result 200). * [ ] http://www.nowsms.com/smpp-information with 1 occurrences migrated to: https://www.nowsms.com/smpp-information ([https](https://www.nowsms.com/smpp-information) result 200). * [ ] http://www.project-voldemort.com/ with 1 occurrences migrated to: https://www.project-voldemort.com/ ([https](https://www.project-voldemort.com/) result 200). * [ ] http://www.project-voldemort.com/voldemort/ with 1 occurrences migrated to: https://www.project-voldemort.com/voldemort/ ([https](https://www.project-voldemort.com/voldemort/) result 200). * [ ] http://www.sedna.org/ with 2 occurrences migrated to: https://www.sedna.org/ ([https](https://www.sedna.org/) result 200). * [ ] http://www.splunk.com/ with 2 occurrences migrated to: https://www.splunk.com/ ([https](https://www.splunk.com/) result 200). * [ ] http://www.springframework.org/schema/beans/spring-beans.xsd with 6 occurrences migrated to: https://www.springframework.org/schema/beans/spring-beans.xsd ([https](https://www.springframework.org/schema/beans/spring-beans.xsd) result 200). * [ ] http://www.springframework.org/schema/integration/spring-integration-2.2.xsd with 6 occurrences migrated to: https://www.springframework.org/schema/integration/spring-integration-2.2.xsd ([https](https://www.springframework.org/schema/integration/spring-integration-2.2.xsd) result 200). * [ ] http://www.springframework.org/schema/integration/spring-integration-4.2.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/integration/spring-integration-4.2.xsd ([https](https://www.springframework.org/schema/integration/spring-integration-4.2.xsd) result 200). * [ ] http://www.springframework.org/schema/integration/spring-integration-5.1.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/integration/spring-integration-5.1.xsd ([https](https://www.springframework.org/schema/integration/spring-integration-5.1.xsd) result 200). * [ ] http://www.springframework.org/schema/integration/spring-integration.xsd with 9 occurrences migrated to: https://www.springframework.org/schema/integration/spring-integration.xsd ([https](https://www.springframework.org/schema/integration/spring-integration.xsd) result 200). * [ ] http://www.techdive.in/java/send-sms-using-jsmpp with 1 occurrences migrated to: https://www.techdive.in/java/send-sms-using-jsmpp ([https](https://www.techdive.in/java/send-sms-using-jsmpp) result 200). * [ ] http://contributor-covenant.org with 1 occurrences migrated to: https://contributor-covenant.org ([https](https://contributor-covenant.org) result 301). * [ ] http://contributor-covenant.org/version/1/3/0/ with 1 occurrences migrated to: https://contributor-covenant.org/version/1/3/0/ ([https](https://contributor-covenant.org/version/1/3/0/) result 301). * [ ] http://static.springsource.org/spring-integration/reference (301) with 5 occurrences migrated to: https://docs.spring.io/spring-integration/reference ([https](https://static.springsource.org/spring-integration/reference) result 301). * [ ] http://docs.spring.io/spring-integration/reference/html with 1 occurrences migrated to: https://docs.spring.io/spring-integration/reference/html ([https](https://docs.spring.io/spring-integration/reference/html) result 301). * [ ] http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html with 1 occurrences migrated to: https://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html ([https](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html) result 301). * [ ] http://forum.springsource.org/forumdisplay.php?42-Integration (301) with 1 occurrences migrated to: https://forum.spring.io/forumdisplay.php?42-Integration ([https](https://forum.springsource.org/forumdisplay.php?42-Integration) result 301). * [ ] http://help.github.com/set-up-git-redirect with 1 occurrences migrated to: https://help.github.com/set-up-git-redirect ([https](https://help.github.com/set-up-git-redirect) result 301). * [ ] http://jira.springsource.org/browse/INTEXT with 1 occurrences migrated to: https://jira.springsource.org/browse/INTEXT ([https](https://jira.springsource.org/browse/INTEXT) result 301). * [ ] http://projects.spring.io/spring-social with 1 occurrences migrated to: https://projects.spring.io/spring-social ([https](https://projects.spring.io/spring-social) result 301). * [ ] http://support.twitter.com/articles/119138-types-of-tweets-and-where-they-appear with 1 occurrences migrated to: https://support.twitter.com/articles/119138-types-of-tweets-and-where-they-appear ([https](https://support.twitter.com/articles/119138-types-of-tweets-and-where-they-appear) result 301). * [ ] http://www.linkedin.com/answers/technology/information-technology/telecommunications/TCH_ITS_TCI/461130-44316394 with 1 occurrences migrated to: https://www.linkedin.com/answers/technology/information-technology/telecommunications/TCH_ITS_TCI/461130-44316394 ([https](https://www.linkedin.com/answers/technology/information-technology/telecommunications/TCH_ITS_TCI/461130-44316394) result 301). * [ ] http://www.splunk.com/download with 1 occurrences migrated to: https://www.splunk.com/download ([https](https://www.splunk.com/download) result 301). * [ ] http://www.spring.io with 5 occurrences migrated to: https://www.spring.io ([https](https://www.spring.io) result 301). * [ ] http://www.springframework.org with 6 occurrences migrated to: https://www.springframework.org ([https](https://www.springframework.org) result 301). * [ ] http://www.springsource.com with 10 occurrences migrated to: https://www.springsource.com ([https](https://www.springsource.com) result 301). * [ ] http://www.springsource.org/spring-integration with 18 occurrences migrated to: https://www.springsource.org/spring-integration ([https](https://www.springsource.org/spring-integration) result 301). * [ ] http://www.springintegration.org/ (301) with 2 occurrences migrated to: https://www.springsource.org/spring-integration/ ([https](https://www.springintegration.org/) result 301). * [ ] http://www.springsource.org/sts with 1 occurrences migrated to: https://www.springsource.org/sts ([https](https://www.springsource.org/sts) result 301). * [ ] http://dev.twitter.com with 2 occurrences migrated to: https://dev.twitter.com ([https](https://dev.twitter.com) result 302). * [ ] http://dev.twitter.com/pages/oauth_faq with 1 occurrences migrated to: https://dev.twitter.com/pages/oauth_faq ([https](https://dev.twitter.com/pages/oauth_faq) result 302). * [ ] http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html with 1 occurrences migrated to: https://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html ([https](https://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html) result 302). * [ ] http://hueniverse.com/oauth with 2 occurrences migrated to: https://hueniverse.com/oauth ([https](https://hueniverse.com/oauth) result 302). * [ ] http://spring.io/spring-integration with 1 occurrences migrated to: https://spring.io/spring-integration ([https](https://spring.io/spring-integration) result 302). * [ ] http://springsource.com/support/springsupport with 1 occurrences migrated to: https://springsource.com/support/springsupport ([https](https://springsource.com/support/springsupport) result 302). * [ ] http://www.exist-db.org/ with 1 occurrences migrated to: https://www.exist-db.org/ ([https](https://www.exist-db.org/) result 302). # Ignored These URLs were intentionally ignored. * http://www.springframework.org/schema/beans with 30 occurrences * http://www.springframework.org/schema/integration with 34 occurrences * http://www.springframework.org/schema/integration/cassandra with 2 occurrences * http://www.springframework.org/schema/integration/hazelcast with 4 occurrences * http://www.springframework.org/schema/integration/jgroups with 8 occurrences * http://www.springframework.org/schema/integration/jt400 with 2 occurrences * http://www.springframework.org/schema/integration/print with 4 occurrences * http://www.springframework.org/schema/integration/smb with 3 occurrences * http://www.springframework.org/schema/integration/smpp with 2 occurrences * http://www.springframework.org/schema/integration/twitter with 4 occurrences * http://www.springframework.org/schema/integration/voldemort with 6 occurrences * http://www.springframework.org/schema/integration/xmpp with 2 occurrences * http://www.springframework.org/schema/integration/xquery with 2 occurrences * http://www.springframework.org/schema/integration/zip with 2 occurrences * http://www.springframework.org/schema/tool with 24 occurrences * http://www.w3.org/2001/XMLSchema with 12 occurrences * http://www.w3.org/2001/XMLSchema-instance with 4 occurrences
168 lines
9.2 KiB
Markdown
168 lines
9.2 KiB
Markdown
Spring Integration XQuery Support
|
|
=================================
|
|
|
|
# Overview
|
|
|
|
**XQuery** is a query and functional programming language that is used to query over a collection of XML data. XQuery is a super-set of **XPath 2.0**. Therefore, if you are looking for *XPath 2.0* functionality, you may consider using the provided components as well. For more information on *XQuery*, please see:
|
|
|
|
* https://en.wikipedia.org/wiki/XQuery
|
|
* https://en.wikipedia.org/wiki/XPath_2.0
|
|
|
|
The **XQuery API for Java** ([JSR225][]) is a specification for providing a common *XQuery API* to the Java programming language. The API can be used for *XML databases* as well as pure *XQuery processors*. For more information, please see:
|
|
|
|
* https://en.wikipedia.org/wiki/XQuery_API_for_Java
|
|
|
|
Various products and libraries provide *XQuery* support. Below is a selection of available choices:
|
|
|
|
## XML Databases
|
|
|
|
* **BaseX** (BSD License) - http://basex.org/
|
|
* **eXist** (GNU LGPL) - https://www.exist-db.org/
|
|
* **MarkLogic** (Commercial License, Free Option) - /free-developer
|
|
* **Sedna** (Apache License, Version 2.0) - https://www.sedna.org/
|
|
|
|
## XQuery Processors
|
|
|
|
* **Zorba** (Apache License, Version 2.0) - http://www.zorba.io/
|
|
* **SAXON** (Mozilla Public License) - http://saxon.sourceforge.net/
|
|
|
|
*Zorba* is written in C++ but provides a Java API ([JSR225][]). *SAXON*, being a pure Java implementation, can be used as a normal Java library. Of all the available XQuery supporting options, *SAXON* is probably the the most widely used choice for Java developers.
|
|
|
|
# Provided Spring Integration Components
|
|
|
|
Currently, the *Spring Integration XQuery Module* provides the following components:
|
|
|
|
* XQuery Router
|
|
* XQuery Transformer
|
|
|
|
## Java Implementation
|
|
|
|
The class *o.s.i.xquery.core.XQueryExecutor* is the backbone for all *XQuery* related operations within this Spring Integration module. Its corresponding test class is *o.s.i.xquery.core.AbstractXQueryExecutorTests* with the subclasses:
|
|
|
|
* *o.s.i.xquery.core.SaxonXQueryExecutorTests*
|
|
* *o.s.i.xquery.core.SednaXQueryExecutorTests*
|
|
|
|
Each of these sub-classes instantiates the *XQueryExecutor* with the corresponding implementations of the *javax.xml.xquery.XQDataSource* interface. The *XQueryExecutor* provides a setter for specifying the [XQDataSource][] to use. If not explicitly specified, it will default to use *Saxon*, if available on the classpath.
|
|
|
|
The XQuery Executor is tested using Saxon and Sedna. Furthermore, we provide the [Spring Integration XQuery Samples][] that additionally also cover *BaseX*. *BaseX* is not included in the actual Spring Integration module, as it conflicts with the *Saxon* jars. Both, the *Sedna* and the *BaseX* XML database need to be started and the datasource needs to connect to them. This is even true, if the XML being queried is not present in the database (as we typically provide it with the payload of the Spring Integration *Message*).
|
|
|
|
See the class comments of *o.s.i.xquery.core.SednaXQueryExecutorTests* for instructions on starting the *Sedna* server and executing the tests using *Sedna*'s implementation. Additional information can also be found at:
|
|
|
|
* http://xqj.net/
|
|
|
|
Of course, much more detailed information is also available on the respective product websites.
|
|
|
|
## XML Namespace Support
|
|
|
|
The Spring Integration XQuery components also provide XML Namespace support in order to simplify their configuration.
|
|
|
|
### Routers
|
|
|
|
#### With **xquery** sub element
|
|
|
|
<int-xquery:xquery-router id="xqueryRouterOne" input-channel="xpathRouterOne">
|
|
<int-xquery:xquery>
|
|
<![CDATA[
|
|
declare variable $name as xs:string external;
|
|
declare variable $class as xs:int external;
|
|
for $student in /mappings/students/student,
|
|
$subject in /mappings/subjects/subject
|
|
where $student/@id = $subject/students/studentId
|
|
and $student/name = $name
|
|
and $student/class = $class
|
|
return $subject/name/text()
|
|
]]>
|
|
</int-xquery:xquery>
|
|
<int-xquery:xquery-parameter name="name" expression="headers['name']"/>
|
|
<int-xquery:xquery-parameter name="class" value="1"/>
|
|
</int-xquery:xquery-router>
|
|
|
|
The configuration is pretty simple. The XQuery in this example is specified using the *xquery* sub-element. The query once executed will yield the names of the output channels. XQueries can have *named parameters* specified. In this case we have two named parameters: **name** and **class**.
|
|
|
|
The value or the expression to find the value for these named parameters is specified using the *xquery-parameter* sub-element. This sub-element provides two possible ways to provide parameters. In the first parameter, the value of the **name** parameter is deduced using a SpEL expression. For the second parameter named **class**, a statically defined value is used.
|
|
|
|
#### With **xquery** attribute
|
|
|
|
<int-xquery:xquery-router id="xqueryRouterTwo"
|
|
input-channel="xpathRouterOne"
|
|
xquery="'Hello World'"
|
|
converter="converter"
|
|
data-source="xqDs">
|
|
<int-xquery:xquery-parameter name="name" ref="name"/>
|
|
</int-xquery:xquery-router>
|
|
|
|
The above config now specifies the *xquery* attribute to specify the query. It additionally has the *converter* and the *data-source* attributes. The *converter* holds a reference to the bean which implements the `org.springframework.integration.xml.DefaultXmlPayloadConverter` interface. By default it uses `org.springframework.integration.xml.DefaultXmlPayloadConverter` Please note that this interface and the implementation is from **spring-integration-xml** project. The *data-source* attribute holds a reference to a bean that implements the `javax.xml.xquery.XQDataSource` interface. By default it will use `net.sf.saxon.xqj.SaxonXQDataSource` implementation.
|
|
|
|
#### With **xquery-file-resource** attribute
|
|
|
|
<int-xquery:xquery-router id="xqueryRouterFour"
|
|
input-channel="xpathRouterOne"
|
|
xquery-file-resource="org/springframework/integration/xquery/XQuery.xq"
|
|
converter="converter"
|
|
data-source="xqDs">
|
|
<int-xquery:xquery-parameter name="name" expression="headers['name']"/>
|
|
<int-xquery:xquery-parameter name="class" value="1"/>
|
|
</int-xquery:xquery-router>
|
|
|
|
Instead of the nested *xquery* element or the *xquery* attribute, we provide the path to the resource that contains the xquery, typically a *.xq* file.
|
|
|
|
Similar to the routers in the core module, the xquery routers accept the mapping subelement to provide an additional level of indirection and mapping from the obtained value(s) from xquery execution to the output channels. Thus, you can have the following subelement in the xquery router definition
|
|
|
|
<int:mapping value="val1" channel="channelA" />
|
|
<int:mapping value="val2" channel="channelB" />
|
|
|
|
### Transformers
|
|
|
|
Similar to routers, transformers too support accepting the xquery as a child sub element, attribute or an attribute with the resource path to the *.xq* file. Since the definitions and meaning of the common attributes are similar to that of the router, we will not be explaining them again unless we have some attribute specific to transformers.
|
|
|
|
#### With **xquery** subelement
|
|
|
|
<int-xquery:xquery-transformer id="xqueryTransformerOne"
|
|
input-channel="xqueryTransformerInOne"
|
|
output-channel="output">
|
|
<int-xquery:xquery>
|
|
<![CDATA[
|
|
declare variable $name as xs:string external;
|
|
declare variable $class as xs:int external;
|
|
for $student in /mappings/students/student,
|
|
$subject in /mappings/subjects/subject
|
|
where $student/@id = $subject/students/studentId
|
|
and $student/name = $name
|
|
and $student/class = $class
|
|
return $subject/name/text()
|
|
]]>
|
|
</int-xquery:xquery>
|
|
<int-xquery:xquery-parameter name="name" expression="headers['name']"/>
|
|
<int-xquery:xquery-parameter name="class" value="1"/>
|
|
</int-xquery:xquery-transformer>
|
|
|
|
#### With **xquery** attribute
|
|
|
|
<int-xquery:xquery-transformer id="xqueryTransformerTwo"
|
|
input-channel="xqueryTransformerOutTwo"
|
|
output-channel="output"
|
|
xquery="'Hello World'"
|
|
converter="converter"
|
|
data-source="xqDs"
|
|
format-output="true">
|
|
</int-xquery:xquery-transformer>
|
|
|
|
An additional attibute *format-output* is mentioned, the value could be *true* or *false*. It informs the transformer to format the output xml generated after transformation.
|
|
|
|
#### With **xquery-file** attribute.
|
|
|
|
<int-xquery:xquery-transformer id="xqueryTransformerThree"
|
|
input-channel="xqueryTransformerIPThree"
|
|
output-channel="output"
|
|
xquery-file-resource="classpath:org/springframework/integration/xquery/XQueryTransform.xq"
|
|
converter="converter"
|
|
data-source="xqDs">
|
|
</int-xquery:xquery-transformer>
|
|
|
|
###Credits
|
|
We would like to thank **Ganesh Shetty** for his suggestion of inclusion of *XQuery* support in *Spring Integration*, giving the initial requirements and use cases for this module. We look forward for more support from the community for evaluating the libraries and provide their feedback.
|
|
|
|
[JSR225]: https://jcp.org/aboutJava/communityprocess/final/jsr225/index.html
|
|
[xqj.net]: https://en.wikipedia.org/wiki/XQuery_API_for_Java
|
|
[Spring Integration XQuery Samples]: https://github.com/SpringSource/spring-integration-samples/tree/master/basic/xquery
|