Tôi đang phát triển Dịch vụ web Java. Tại thời điểm này tôi có thể nhận được yêu cầu tiêu đề Http. Nhưng tôi muốn thêm nhiều yêu cầu tiêu đề hơn.Thêm tiêu đề HTTP vào phản hồi dịch vụ JAX-WS
Tôi hiện đang thực hiện việc này trong bộ lọc 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);
}
}
Vấn đề với chiến lược này là tiêu đề được thêm là tĩnh.
Với lớp SoapHandler tôi có thể có được một thông điệp SOAP - năng động:
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]", ""));
}
Vì vậy, những gì tôi thực sự muốn là để tham gia nhắn xà phòng năng động với bộ lọc. Làm thế nào tôi có thể đạt được điều này?
Ý anh là gì bằng cách "tiêu đề là tĩnh"? Tiêu đề tĩnh so với tiêu đề động là gì? – kolossus
"Hoạt động", "cái gì đó" là giá trị tĩnh mà tôi đã xác định. Tôi muốn có thể có nội dung xà phòng khác nhau cho mỗi yêu cầu – Goldbones
Tôi vẫn không hiểu người đàn ông: "giá trị tĩnh" so với "nội dung xà phòng" là gì? Bạn đang tìm cách đặt tiêu đề HTTP dựa trên điều kiện? Hay bạn đang tìm cách thiết lập một tiêu đề SOAP? * Tôi muốn có thể có Nội Dung Xà Phòng khác nhau cho mỗi yêu cầu * thực sự không dịch tốt lắm. Bạn có thể đăng hình minh họa hay gì đó không? – kolossus