use of org.wso2.transport.http.netty.message.HttpMessageDataStreamer in project ballerina by ballerina-lang.
the class HttpUtil method populateEntityBody.
/**
* Populate entity with the relevant body content.
*
* @param context Represent ballerina context
* @param httpMessageStruct Represent ballerina request/response
* @param entity Represent an entity
* @param isRequest boolean representing whether the message is a request or a response
*/
protected static void populateEntityBody(Context context, BStruct httpMessageStruct, BStruct entity, boolean isRequest) {
HTTPCarbonMessage httpCarbonMessage = HttpUtil.getCarbonMsg(httpMessageStruct, HttpUtil.createHttpCarbonMessage(isRequest));
HttpMessageDataStreamer httpMessageDataStreamer = new HttpMessageDataStreamer(httpCarbonMessage);
String contentType = httpCarbonMessage.getHeader(HttpHeaderNames.CONTENT_TYPE.toString());
if (MimeUtil.isNotNullAndEmpty(contentType) && contentType.startsWith(MULTIPART_AS_PRIMARY_TYPE) && context != null) {
MultipartDecoder.parseBody(context, entity, contentType, httpMessageDataStreamer.getInputStream());
} else {
int contentLength = NO_CONTENT_LENGTH_FOUND;
String lengthStr = httpCarbonMessage.getHeader(HttpHeaderNames.CONTENT_LENGTH.toString());
try {
contentLength = lengthStr != null ? Integer.parseInt(lengthStr) : contentLength;
if (contentLength == NO_CONTENT_LENGTH_FOUND) {
contentLength = httpCarbonMessage.getFullMessageLength();
}
MimeUtil.setContentLength(entity, contentLength);
} catch (NumberFormatException e) {
throw new BallerinaException("Invalid content length");
}
EntityBodyHandler.setDiscreteMediaTypeBodyContent(entity, httpMessageDataStreamer.getInputStream());
}
httpMessageStruct.addNativeData(MESSAGE_ENTITY, entity);
httpMessageStruct.addNativeData(IS_BODY_BYTE_CHANNEL_ALREADY_SET, true);
}
use of org.wso2.transport.http.netty.message.HttpMessageDataStreamer in project ballerina by ballerina-lang.
the class UriTemplateDispatcherTest method testSpecialCharacterURI.
@Test(description = "Test dispatching with OPTIONS request with wildcard")
public void testSpecialCharacterURI() {
String path = "/ech%5Bo/ech%5Bo/b%5Bar";
HTTPTestRequest cMsg = MessageUtils.generateHTTPMessage(path, "GET", null);
HTTPCarbonMessage response = Services.invokeNew(application, TEST_EP, cMsg);
Assert.assertNotNull(response, "Response message not found");
BJSON bJson = new BJSON(new HttpMessageDataStreamer(response).getInputStream());
Assert.assertEquals(bJson.value().get("echo113").asText(), "b[ar", "Resource dispatched to wrong template");
}
use of org.wso2.transport.http.netty.message.HttpMessageDataStreamer in project ballerina by ballerina-lang.
the class UriTemplateDispatcherTest method testOPTIONSMethods.
@Test(description = "Test dispatching with OPTIONS method")
public void testOPTIONSMethods() {
String path = "/options/hi";
HTTPTestRequest cMsg = MessageUtils.generateHTTPMessage(path, "OPTIONS", "hi");
HTTPCarbonMessage response = Services.invokeNew(application, TEST_EP, cMsg);
Assert.assertNotNull(response, "Response message not found");
BJSON bJson = new BJSON(new HttpMessageDataStreamer(response).getInputStream());
Assert.assertEquals(bJson.value().get("echo").asText(), "wso2", "Resource dispatched to wrong template");
}
use of org.wso2.transport.http.netty.message.HttpMessageDataStreamer in project ballerina by ballerina-lang.
the class UriTemplateDispatcherTest method testValidUrlTemplate5Dispatching.
@Test(description = "Test accessing the variables parsed with URL. /products5/{productId}/reg")
public void testValidUrlTemplate5Dispatching() {
HTTPTestRequest cMsg = MessageUtils.generateHTTPMessage("/ecommerceservice/products5/PID125/reg?regID=RID125¶1=value1", "GET");
HTTPCarbonMessage response = Services.invokeNew(application, TEST_EP, cMsg);
Assert.assertNotNull(response, "Response message not found");
// Expected Json message : {"Template":"T5","ProductID":"PID125","RegID":"RID125"}
BJSON bJson = new BJSON(new HttpMessageDataStreamer(response).getInputStream());
Assert.assertEquals(bJson.value().get("Template").asText(), "T5", "Resource dispatched to wrong template");
Assert.assertEquals(bJson.value().get("ProductID").asText(), "PID125", "ProductID variable not set properly.");
Assert.assertEquals(bJson.value().get("RegID").asText(), "RID125", "RegID variable not set properly.");
}
use of org.wso2.transport.http.netty.message.HttpMessageDataStreamer in project ballerina by ballerina-lang.
the class UriTemplateDispatcherTest method testInValidUrlTemplateDispatching.
@Test(description = "Test resource dispatchers with invalid URL. /products/{productId}/{regId}", dataProvider = "inValidUrl")
public void testInValidUrlTemplateDispatching(String path) {
HTTPTestRequest cMsg = MessageUtils.generateHTTPMessage(path, "GET");
final String xOrderIdHeadeName = "X-ORDER-ID";
final String xOrderIdHeadeValue = "ORD12345";
cMsg.setHeader(xOrderIdHeadeName, xOrderIdHeadeValue);
HTTPCarbonMessage response = Services.invokeNew(application, TEST_EP, cMsg);
Assert.assertEquals(response.getProperty(HttpConstants.HTTP_STATUS_CODE), 404, "Response code mismatch");
// checking the exception message
String errorMessage = StringUtils.getStringFromInputStream(new HttpMessageDataStreamer(response).getInputStream());
Assert.assertNotNull(errorMessage, "Message body null");
Assert.assertTrue(errorMessage.contains("no matching resource found for path"), "Expected error not found.");
}
Aggregations