Как поток XML-ответ, возвращаемый сервлетом из оболочки PHP?

У меня есть REST API, который предназначен для возврата XML в качестве ответа. API построен с использованием PHP. Однако внутренне он взаимодействует с сервлетом JSP, работающим на сервере Tomcat, установленном на другом компьютере в моей сети. Каков идеальный способ вызвать сервлет и передать ответ конечному пользователю? В этом конкретном случае нет обработки, которая должна выполняться на уровне PHP при получении ответа от сервлета. В настоящее время я использую cURL, чтобы сделать http-пост от php, получить полный ответ от сервлета и вернуть его пользователю. Однако xml-ответ может быть большим, что может вызвать проблемы с памятью в PHP. Поэтому мне нужно реализовать то же самое, передавая ответ.

Текущий код реализации приведен ниже:

PHP:

public function curlPost($url,$data){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
return $server_output;
}

$url = "http://base_url_to_invoke_servlet/";
$data = "param_1=".$params[0]."&param_2=".$params[1];
$result = curlPost($url,$data);
Header ( 'Content-type: text/xml' );
echo $result;

Servlet:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;

public class MyAPIServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGetPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGetPost(request, response);
}

private void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getQueryString());
APIRequestManager apiReqMgr = new APIRequestManager();
XMLStreamWriter xmlWriter = null;
XMLOutputFactory factory = XMLOutputFactory.newInstance();
ServletOutputStream outputStream = response.getOutputStream();
response.setCharacterEncoding("UTF-8");
response.setContentType("text/xml");
try {
xmlWriter = factory.createXMLStreamWriter(outputStream);
apiReqMgr.executeRequest(request,xmlWriter);
} catch (XMLStreamException e) {
e.printStackTrace();
}
finally{
try {
if(xmlWriter != null){
xmlWriter.flush();
xmlWriter.close();
}
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]