2016-05-11 3 views
0

Я хочу выполнить простой xquery в java. Но я получаю исключениеИсключение при получении результата xquery

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.xml.xquery.XQException: 
    XQJFOS017 - Can not call getItemType() when Forward Only Sequences is not positioned on an item. 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Мои dependecies

<groupId>org.basex</groupId> 
<artifactId>basex</artifactId> 
<version>7.3.1</version> 

<groupId>net.xqj</groupId> 
<artifactId>basex-xqj</artifactId> 
<version>1.4.0</version> 

Мой Bean

@Bean(name = "baseXDataSource") 
public XQDataSource xqDataSource() throws XQException { 
    XQDataSource ds = new BaseXXQDataSource(); 
    ds.setProperty("serverName", "localhost"); 
    ds.setProperty("port", "1984"); 
    ds.setProperty("user", "admin"); 
    ds.setProperty("password", "admin"); 
    ds.setProperty("databaseName", "2016"); 
    return ds; 
} 

Мой код

XQConnection conn = baseXDataSource.getConnection("admin", "admin"); 
     XQPreparedExpression expr = conn.prepareExpression("123"); 
     XQResultSequence result = expr.executeQuery(); 
     return result.getItemType().toString(); 

Любой XQuery, что я судимое выполнить, дает такой же результат , Что не так? Благодаря!

ответ

2

В XQJ XQResultSequence - это комбинация коллекции и итератора. Метод, подобный getItemType(), применяется к элементу в «текущей позиции» в коллекции. Текущая позиция изначально «до первого элемента». Чтобы найти тип элемента первого элемента в коллекции, сначала нужно поместить коллекцию в первый элемент, вызвав метод next().