Это может быть один из безумных / глупых / глупых / длинных вопросов, поскольку я новичок в веб-сервисах.
Я хочу написать веб-сервис, который будет возвращать ответ в формате XML (я использую свой сервис для YUIавтозаполнение).Я использую Eclipse и Axis2 и следую http://www.softwareagility.gr/index.php?q=node/21 Я хочу получить ответ в следующем формате
<codes>
<code value="Pegfilgrastim"/>
<code value="Peggs"/>
<code value="Peggy"/>
<code value="Peginterferon alfa-2 b"/>
<code value="Pegram"/>
</codes>
Количество элементов code
может варьироваться в зависимости от ответа.До сих пор я пробовал следующие способы
1) Создать XML с использованием буфера String и вернуть строку. (я предоставляю частичный код, чтобы избежать путаницы)
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());
}
Это дает следующий ответс нежелательными элементами <ns:myServiceResponse>
и <ns:return>
.
<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>
Но он не работал с автозаполнением YUI (возможно, потому, что требовался ответ в указанном выше формате)
2) Использование DocumentBuilderFactory :
Как
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);
}
Получена следующая ошибка
org.apache.axis2.AxisFault: Mapping qname not fond for the package: com.sun.org.apache.xerces.internal.dom
3) Использование сервлета: Я попытался получить тот же ответ, используя простой сервлет, и онработал.Вот мой сервлет
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());
}
Он дал ответ, аналогичный указанному выше, и работал с автозаполнением YUI без каких-либо дополнительных тегов.
Подскажите, пожалуйста, как я могу получить XML-ответ без каких-либо нежелательных элементов?
Спасибо.