Sto sviluppando un servizio Web Java. In questo momento posso ottenere richieste di intestazione Http. Ma voglio aggiungere altre richieste di intestazione.Aggiungere le intestazioni HTTP alla risposta del servizio JAX-WS
Attualmente sto facendo questo in un filtro servlet.
@WebFilter(urlPatterns = {"/*"})
public class AddHeader implements Filter {
@Resource
private WebServiceContext context;
public AddHeader() {
}
@Override
public void init(FilterConfig fConfig) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(
ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (request.getContentLength() != -1 && context != null) {
MessageContext mc = context.getMessageContext();
((HttpServletResponse) response).addHeader(
"Operation", "something"
);
}
chain.doFilter(request, response);
}
}
Il problema con questa strategia è che l'intestazione aggiunta è statica.
Con classe SOAPHandler posso ottenere un messaggio SOAP - dinamica:
public class SoapClass implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext messageContext) {
log(messageContext);
return true;
}
@Override
public Set<QName> getHeaders() {
Set<QName> qNames = Collections.EMPTY_SET;
return qNames;
}
@Override
public boolean handleFault(SOAPMessageContext messageContext) {
log(messageContext);
return true;
}
@Override
public void close(MessageContext context) {
}
public static String getMsgAsString(SOAPMessage message) {
String msg = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
msg = baos.toString();
} catch (SOAPException | IOException soape) {
}
return msg;
}
private String soapToString(SOAPMessage message, boolean indent) {
final StringWriter sw = new StringWriter();
try {
TransformerFactory.newInstance().newTransformer().transform(
new DOMSource(message.getSOAPPart()),
new StreamResult(sw));
} catch (TransformerException e) {
throw new RuntimeException(e);
}
return (indent ? sw.toString() : sw.toString().replaceAll("[\\r\\n]", ""));
}
Quindi, quello che volevo era quello di unire messaggio SOAP dinamica con filtro. Come posso raggiungere questo obiettivo?
Cosa si intende per "l'intestazione è statico"? Che cos'è un'intestazione statica rispetto a un'intestazione dinamica? – kolossus
"Operazione", "qualcosa" è un valore statico che ho definito. Voglio avere diversi contenuti di sapone per ogni richiesta – Goldbones
Non riesco ancora a capirlo: cos'è un "valore statico" rispetto a un "contenuto di sapone"? Stai cercando di impostare un'intestazione HTTP in base a una condizione? O stai cercando di impostare un'intestazione SOAP? * Voglio essere in grado di trovare diversi contenuti di sapone per ogni richiesta * in realtà non si traduce molto bene. Puoi pubblicare un'illustrazione o qualcosa del genere? – kolossus