You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
4.1 KiB
89 lines
4.1 KiB
package com.example.sbcamel.init;
|
|
|
|
import org.apache.camel.Exchange;
|
|
import org.apache.camel.builder.RouteBuilder;
|
|
import org.apache.camel.component.bean.BeanConstants;
|
|
import org.apache.camel.component.cxf.common.message.CxfConstants;
|
|
import org.apache.camel.model.dataformat.JsonLibrary;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import com.example.sbcamel.mapper.SessionMapper;
|
|
import com.example.sbcamel.processor.InspectionProcessor;
|
|
import com.example.sbcamel.processor.TestProcessor;
|
|
import com.example.sbcamel.service.SessionService;
|
|
|
|
import jakarta.annotation.PostConstruct;
|
|
import jakarta.ws.rs.core.Response;
|
|
|
|
@Component
|
|
public class CamelRouter extends RouteBuilder {
|
|
|
|
private static final String createSessionSql = "CREATE TABLE IF NOT EXISTS public.session (sessionId UUID not null, "
|
|
+ "username CHARACTER VARYING not null, password CHARACTER VARYING not null, PRIMARY KEY (sessionId))";
|
|
private static final String addSelector1Sql = "ALTER TABLE IF EXISTS public.session ADD COLUMN IF NOT EXISTS selector1 CHARACTER VARYING NULL";
|
|
private static final String addSelector2Sql = "ALTER TABLE IF EXISTS public.session ADD COLUMN IF NOT EXISTS selector2 CHARACTER VARYING NULL";
|
|
private static final String addSelector3Sql = "ALTER TABLE IF EXISTS public.session ADD COLUMN IF NOT EXISTS selector3 CHARACTER VARYING NULL";
|
|
|
|
@Value("${app.queue-name}")
|
|
private String queueName;
|
|
|
|
@Autowired
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
|
@Autowired
|
|
protected InspectionProcessor inspectionProcessor;
|
|
|
|
@Autowired
|
|
protected TestProcessor testProcessor;
|
|
|
|
@PostConstruct
|
|
private void init() {
|
|
org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
|
|
jdbcTemplate.execute(createSessionSql);
|
|
jdbcTemplate.execute(addSelector1Sql);
|
|
jdbcTemplate.execute(addSelector2Sql);
|
|
jdbcTemplate.execute(addSelector3Sql);
|
|
}
|
|
|
|
@Override
|
|
public void configure() throws Exception {
|
|
onException(jakarta.ws.rs.NotFoundException.class).handled(true)
|
|
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(Response.Status.NOT_FOUND.getStatusCode()))
|
|
.setBody(simple("${exchangeProperty.CamelExceptionCaught.getMessage()}"));
|
|
|
|
from("cxfrs:/api?resourceClasses=" + SessionService.class.getName() + "&bindingStyle=Default"
|
|
+ "&providers=jaxrsProvider&loggingFeatureEnabled=true").to("log:cxfrs?showAll=true")
|
|
.to("activemq6:queue:" + queueName).process(exchange -> {
|
|
if (exchange.getMessage().getBody() != null && exchange.getMessage().getBody() instanceof byte[]
|
|
&& new String((byte[]) exchange.getMessage().getBody()).equals("null")) {
|
|
if (exchange.getIn().getHeader(Exchange.HTTP_METHOD).equals("GET")) {
|
|
throw new jakarta.ws.rs.NotFoundException();
|
|
}
|
|
}
|
|
});
|
|
|
|
from("activemq6:queue:" + queueName)
|
|
.process(exchange -> exchange.getIn().setHeader(BeanConstants.BEAN_METHOD_NAME,
|
|
exchange.getIn().getHeader(CxfConstants.OPERATION_NAME.toLowerCase())))
|
|
.to("log:activemq?showAll=true").transacted("propagationRequired").choice()
|
|
.when(header(BeanConstants.BEAN_METHOD_NAME).isEqualTo("updateSession"))
|
|
.to("mybatis:" + SessionMapper.class.getName() + ".updateSession?statementType=Update&outputHeader=X-UpdateResult")
|
|
.process(exchange -> {
|
|
exchange.getMessage().setBody(exchange.getIn().getBody());
|
|
})
|
|
.when(header(BeanConstants.BEAN_METHOD_NAME).isEqualTo("findSessions"))
|
|
.to("mybatis:" + SessionMapper.class.getName() + ".findSessions?statementType=SelectList")
|
|
.when(header(BeanConstants.BEAN_METHOD_NAME).isEqualTo("findSession"))
|
|
.to("mybatis:" + SessionMapper.class.getName() + ".findSession?statementType=SelectOne")
|
|
.when(header(BeanConstants.BEAN_METHOD_NAME).isEqualTo("inspect"))
|
|
.to("mybatis:" + SessionMapper.class.getName() + ".findSession?statementType=SelectOne")
|
|
.process(inspectionProcessor)
|
|
.when(header(BeanConstants.BEAN_METHOD_NAME).isEqualTo("test"))
|
|
.process(testProcessor)
|
|
.end().marshal().json(JsonLibrary.Jackson);
|
|
}
|
|
|
|
} |