Este puede ser uno de los locos /estúpido /tonta /preguntas extensas como soy novato en los servicios web.

Quiero escribir un servicio web que devuelve la respuesta en formato XML (estoy usando mi servicio para YUI autocompletar). Estoy usando Eclipse y Axis2 y siguientes http://www.softwareagility.gr/index.php?q=node/21
Quiero la respuesta en el siguiente formato

<codes>
<code value="Pegfilgrastim"/>
<code value="Peggs"/>
<code value="Peggy"/>
<code value="Peginterferon alfa-2 b"/>
<code value="Pegram"/>
</codes>

Número de code elementos pueden variar en función de la respuesta.
Hasta ahora he intentado siguientes maneras

1) Crear XML mediante búfer de Cadena y devuelve la cadena.(Me estoy dando parcial código para evitar confusiones)

public String myService ()
{    
    //Some other stuff
    StringBuffer outputXML = new StringBuffer();
    outputXML.append("<?xml version='1.0' standalone='yes'?>");
    outputXML.append("<codes>");
    while(SOME_CONDITION)
    {
       //Some business logic
       outputXML.append("<code value=\""+tempStr+"\">"+"</code>");    
    }
    outputXML.append("</codes>");
    return (outputXML.toString());  
}

Se da la siguiente respuesta no <ns:myServiceResponse> y <ns:return> elemento.

<ns:myServiceResponse>
<ns:return>
<?xml version='1.0' standalone='yes'?><codes><code value="Peg-shaped teeth"></code><code value="Pegaspargase"></code><code value="Pegfilgrastim"></code><code value="Peggs"></code><code value="Peggy"></code><code value="Peginterferon alfa-2 b"></code><code value="Pegram"></code></codes>
</ns:return>
</ns:findTermsResponse>    

Pero no trabajar con YUI autocompletar (Puede ser debido a que se requiere de la respuesta en el formato mencionado anteriormente)

2) El Uso De DocumentBuilderFactory :

Como

public Element myService ()
{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = factory.newDocumentBuilder();
    Document doc = docBuilder.newDocument();
    Element codes = doc.createElement("codes");
    while(SOME_CONDITION)
    {
      //Some business logic
      Element code = doc.createElement("code");
      code.setAttribute("value", tempStr);
      codes.appendChild(code);
    }
    return(codes);
}  

Consiguió siguiente error

org.apache.axis2.AxisFault: Mapping qname not fond for the package: com.sun.org.apache.xerces.internal.dom  

3) el Uso de servlets : traté de obtener la misma respuesta simple usando servlets y funcionó. Aquí está mi servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
  {
    StringBuffer outputXML = new StringBuffer();
    response.setContentType("text/xml");
    PrintWriter out = response.getWriter();
    outputXML.append("<?xml version='1.0' standalone='yes'?>");
    outputXML.append("<codes>"); 
    while(SOME_CONDITION)
    {
        //Some business logic
        outputXML.append("<code value=\"" + tempStr + "\">" + "</code>");    
    }
    outputXML.append("</codes>");
    out.println(outputXML.toString());
}

Se dio respuesta de la misma como se mencionó anteriormente y se trabajó con YUI autocompletar sin ningún tipo de etiqueta.

Por favor, puede decir cómo puedo obtener el XML de respuesta sin ningún tipo de elementos no deseados ?

Gracias.

OriginalEl autor xyz | 2011-08-03

3 Comentarios

  1. 2

    Axis2 es para la entrega de los Objetos de nuevo a la persona que llama. Es por eso que agrega cosas a la respuesta aún es un simple objeto String.

    Utilizando el segundo enfoque de su servicio devuelve un complejo objeto de Java (Element ejemplo) que es para la descripción de un fragmento de XML. De esta manera la persona que llama tiene que ser consciente de este objeto para poder deserializar y restaurar el objeto de Java que contiene datos XML.

    El tercer enfoque es el más simple y más en su caso, sobre el tipo de devolución: no devolver un serializa el objeto de Java, sólo la llanura de texto xml. Por supuesto, usted puede utilizar DocumentBuilder para preparar el XML, pero en el final se tiene que hacer Cadena de llamando a la adecuada getXml(), asXml() método (o tipo de…)

    Gracias por su respuesta. Traté de servlet para ver dónde está el problema. Yo no tengo ninguna otra opción que no sea de servicio web. ¿Cómo se puede lograr el mismo (como yo doign en servlet) en el servicio web ?
    Por lo que yo sé de un servicio web consta de servlets. Usted tiene que usar Axis2? Si sí, entonces yo creo que es imposible para deshacerse de la web de la implementación del servicio de «decoración».

    OriginalEl autor jabal

  2. 1

    Finalmente consiguió el trabajo, aunque no soy capaz de eliminar el elemento no deseado. (No me molestan hasta que todas las cosas estén en su lugar). He utilizado AXIOMA para generar la respuesta.

    public OMElement myService ()
    {
        OMFactory fac = OMAbstractFactory.getOMFactory();
        OMNamespace omNs = fac.createOMNamespace("", "");
        OMElement codes = fac.createOMElement("codes", omNs);
        while(SOME_CONDITION)
        {
           OMElement code = fac.createOMElement("code", null, codes);
           OMAttribute value = fac.createOMAttribute("value", null, tempStr);
           code.addAttribute(value);
        }
        return(codes); 
    }

    Enlaces : 1) http://songcuulong.com/public/html/webservice/create_ws.html

    2) http://sv.tomicom.ac.jp/~koba/axis2-1.3/docs/xdocs/1_3/rest-ws.html

    OriginalEl autor xyz

  3. 0

    Creo que usted no puede regresar a su xml personalizado con el Eje. Se envuelva en su envolvente de todos modos.

    OriginalEl autor jabal

Dejar respuesta

Please enter your comment!
Please enter your name here