Tôi đang làm việc trên các dịch vụ web mùa xuân. Tôi cần thêm một số yếu tố tùy chỉnh trong request và response message.which sẽ trông như thế này:Cách đọc thông tin Tiêu đề SOAP từ yêu cầu và thêm nó vào phản hồi trong các dịch vụ web mùa xuân
<soapenv:Envelope>
<soapenv:Header>
<tid:SplsTID>
<tid:Trantype>123</tid:Trantype>
<tid:Tranver>234</tid:Tranver>
</tid:SplsTID>
</soapenv:Header>
<soapenv:Body>
<get:GetOrderNumberRequest LoggingLevel="REGULAR" MonitorFlag="Y">
<get:Header>
<get:TransactionId>111</get:TransactionId>
<get:SourceSystemId>SOMS</get:SourceSystemId>
<get:DateTime>2011-11-11T11:11:11</get:DateTime>
</get:Header>
<get:Body>
<get:StaplesOrderNumber RangeFlag="N" ReleaseFlag="N">
<get:OrderNumber Count="1" End="11" Start="9"/>
</get:StaplesOrderNumber>
</get:Body>
</get:GetOrderNumberRequest>
</soapenv:Body>
</soapenv:Envelope>
i am có thể nối thêm <tid:SplsTID>
dưới <soapenv:Header>
trong yêu cầu bằng cách sửa đổi các tập tin WSDL. mà trông như thế này:
<wsdl:message name="GetOrderNumberRequest">
<wsdl:part element="tns:GetOrderNumberRequest" name="GetOrderNumberRequest">
</wsdl:part>
<wsdl:part element="sch1:SplsTID" name="SplsTID">
</wsdl:part>
</wsdl:message>
<wsdl:message name="GetOrderNumberResponse">
<wsdl:part element="tns:GetOrderNumberResponse" name="GetOrderNumberResponse">
</wsdl:part>
<wsdl:part element="sch1:SplsTID" name="SplsTID">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="ONAS">
<wsdl:operation name="GetOrderNumber">
<wsdl:input message="tns:GetOrderNumberRequest" name="GetOrderNumberRequest">
</wsdl:input>
<wsdl:output message="tns:GetOrderNumberResponse" name="GetOrderNumberResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
Vấn đề là, tôi muốn đọc <tid:SplsTID>
phần từ yêu cầu và muốn gắn nó dưới phần tiêu đề xà phòng của phản ứng, mà không xảy ra. tôi đang sử dụng điểm cuối dựa trên chú thích. mã sẽ đọc tiêu đề xà phòng là gì và sẽ nối thêm vào trong câu trả lời.
hiện lớp điểm cuối của tôi là:
@Endpoint
public class OrderNumberServiceEndPoint {
public static final String NAMESPACE_URI = "http://schemas.staples.com/onas/getOrderNumber";
/**
* The local name of the expected request.
*/
public static final String REQUEST_LOCAL_NAME = "GetOrderNumberRequest";
/**
* The local name of the created response.
*/
public static final String RESPONSE_LOCAL_NAME = "GetOrderNumberResponse";
private GetOrderNumberService getOrderNumberService;
public void setGetOrderNumberService(
GetOrderNumberService getOrderNumberService) {
this.getOrderNumberService = getOrderNumberService;
}
@PayloadRoot(localPart = REQUEST_LOCAL_NAME, namespace = NAMESPACE_URI)
public GetOrderNumberResponse processOrderNumberRequest(
GetOrderNumberRequest request) throws Exception {
GetOrderNumberResponse response = null;
try{
response = getOrderNumberService.executeRequest(request);
}catch(CannotCreateTransactionException e){
logger.error(ErrorConstants.ERROR_E17);
throw new ServiceException(ErrorConstants.ERROR_E17);
}
return response;
}
}
Hãy cho tôi biết nếu có nhiều chi tiết được yêu cầu. Bất kỳ trợ giúp sẽ được đánh giá cao.
tôi đã gọi tài liệu về mùa xuân [link] (http://static.springsource.org/spring-ws/site/reference/html/server.html) .i đã thành công trong việc đọc tiêu đề SOAP bên trong method.i của tôi đã thay đổi phương thức lớp endpoint của tôi như thế này: '@PayloadRoot (localPart = REQUEST_LOCAL_NAME, namespace = NAMESPACE_URI) @ResponsePayload quy trình SaajSoapMessage công khaiOrderNumberRequest (@RequestPayload GetOrderNumberYêu cầu yêu cầu, tiêu đề SoapHeader) '.now nó ném lỗi' java.lang.IllegalStateException: Không có adapter cho điểm cuối' bởi vì tôi đã thay đổi kiểu trả về của phương thức thành 'SaajSoapMessage' từ' GetOrderNumberResponse'. didnt work –
Tôi nghĩ bạn không thể sử dụng 'SaajSoapMessage' làm kiểu trả về. Bạn có thể cần sử dụng 'GetOrderNumberResponse' để khớp với WSDL của bạn. Trong ví dụ của tôi, tôi nhận được yêu cầu từ 'MessageContext' nhưng bạn cũng có thể nhận được đối tượng phản hồi và có thể đặt một số tiêu đề xà phòng ở đó. – evandongen
Trong ví dụ của bạn, kiểu trả về của phương thức là 'Response'. Đó có phải là phần PayLoad của thông báo phản hồi không? Tôi tự hỏi liệu chúng ta có trả về phần Payload của phản hồi vốn thực sự nằm trong phần Soap Body, sau đó phần header sẽ được thêm vào trong phản hồi như thế nào? Hơn nữa không nhận được bất kỳ mã làm việc nào giải quyết yêu cầu này. Tôi không muốn làm bất cứ điều gì với phần tiêu đề, bất cứ điều gì đến trong yêu cầu chỉ gửi như nó là trong phản ứng. logic chỉ để tính phần tải trọng của cơ thể. Nó có vẻ rất yêu cầu chung cho các dịch vụ web nhưng rất kém tài liệu cho springWS. –