2012-08-13 10 views
5

Aquí está el código siguiente extraído del manual de Primavera-WS:JDOM 2 y XPath

public class HolidayEndpoint { 

    private static final String NAMESPACE_URI = "http://mycompany.com/hr/schemas"; 

    private XPath startDateExpression; 

    private XPath endDateExpression; 

    private XPath nameExpression; 

    private HumanResourceService humanResourceService; 

    @Autowired 
    public HolidayEndpoint(HumanResourceService humanResourceService)      (2) 
     throws JDOMException { 
    this.humanResourceService = humanResourceService; 

    Namespace namespace = Namespace.getNamespace("hr", NAMESPACE_URI); 

    startDateExpression = XPath.newInstance("//hr:StartDate"); 
    startDateExpression.addNamespace(namespace); 

    endDateExpression = XPath.newInstance("//hr:EndDate"); 
    endDateExpression.addNamespace(namespace); 

    nameExpression = XPath.newInstance("concat(//hr:FirstName,' ',//hr:LastName)"); 
    nameExpression.addNamespace(namespace); 
    } 

Mi problema es que esto parece estar utilizando JDOM 1.0 y me gustaría utilizar JDOM 2.0.

¿Cómo convierto este código de JDOM 1.0 a JDOM 2.0? ¿Por qué la primavera no ha actualizado su código de muestra?

Gracias!

+0

¿Ha actualizado las importaciones de usar jDom2? Por ejemplo, la importación para Element es 'import org.jdom2.Element;'. –

Respuesta

7

JDOM2 es aún relativamente nuevo .... pero, la fábrica de XPath en JDOM 1.x está particularmente rota ... y JDOM 2.x tiene una nueva API para ello. La antigua API existe para compatibilidad/migración hacia atrás. Mire este documento aquí por algún motivo, y el new API in JDOM 2.x.

En su caso, es probable que desee reemplazar el código con algo como:

XPathExpression<Element> startDateExpression = 
    XPathFactory.instance().compile("//hr:StartDate", Filters.element(), null, namespace); 

List<Element> startdates = startDateExpression.evaluate(mydocument); 

Rolf

+0

una vez que he hecho eso, ¿cómo uso xPathExpression para recuperar el valor? el método valueOf se ha ido. – Thom

+0

XPathExpression tiene la evaluación y EvaluateFirst que respectivamente devuelven una lista de todos los nodos que coinciden con la expresión, o simplemente el primer nodo coincidente. en el ejemplo anterior, startdates es una lista que contiene todos los elementos StartDate en el documento. – rolfl

+0

Gracias de nuevo por toda su ayuda. Ahora estoy perdido, sin embargo. Estoy trabajando en http://static.springsource.org/spring-ws/sites/2.0/reference/html/tutorial.html en el capítulo 3. Estoy intentando descubrir cómo convertir el código allí para usar JDOM 2. – Thom

0

Con el fin de analizar el valor utilizando el código anterior de Rolf, iterar a través de la lista o conseguir el primer elemento de la Lista suponiendo que solo hay uno.

List<Element> startdates = startDateExpression.evaluate(mydocument); 

    for (Element e: startdates){ 
     logger.debug("value= " + e.getValue()); 
    } 

o

List<Element> startdates = startDateExpression.evaluate(mydocument); 
logger.debug("value " + startdates.get(0).getValue();