Apache Camel Split - การแยกส่วนหัวไม่ถูกต้องเมื่อมีการระบุส่วนหัวเดียวเท่านั้น

ฉันได้ติดตั้งจุดสิ้นสุดซึ่งได้รับพารามิเตอร์หลายตัวเป็นการสืบค้น

i.e: /flights?flight=AB,100,12FEB18&flight=CD,200,13FEB18&flight=...&...

ในอูฐ ฉันต้องการแยกพารามิเตอร์การบินแต่ละรายการและจัดการแยกกัน ดังนั้นฉันจึงมี:

.split(header("flight"))

กรณีที่ 1

Query: /flights?flight=AB,100,24FEB18&flight=AB,200,25FEB18

แบ่งออกเป็น:
1) AB, 100, 24FEB18
2) AB, 200, 25FEB18

ผลลัพธ์: ถูกต้อง

กรณีที่ 2

Query: /flights?flight=AB&flight=AB,100&flight=AB,200,26FEB18

แบ่งออกเป็น:
1) AB
2) AB, 100
3) AB, 200, 26FEB18

ผลลัพธ์: ถูกต้อง

กรณีที่ 3

Query: /flights?flight=AB,400,28FEB18

แบ่งออกเป็น:
1) AB
2) 400
3) 28FEB18

ผลลัพธ์: ไม่ถูกต้อง

ที่คาดไว้:
1) AB, 400, 28FEB61

เหตุใดตัวแยกสำหรับส่วนหัวหนึ่งจึงทำงานแตกต่างออกไป และฉันจะแก้ไขได้อย่างไร


person wkrol    schedule 15.03.2018    source แหล่งที่มา


คำตอบ (1)


ฉันเดาว่า Camel นั้น "ฉลาดเกินไป" สำหรับการใช้งานของคุณ ดังนั้นคุณจึงมีพฤติกรรมที่แตกต่างออกไป

กรณีที่ 1 และ 2 คือรายการของรายการ รายการพารามิเตอร์ flight และทุกพารามิเตอร์ประกอบด้วยรายการค่าที่คั่นด้วยเครื่องหมายจุลภาค

กรณีที่ 3 เป็นรายการแบบง่าย พารามิเตอร์ flight เดี่ยวที่มีรายการค่าที่คั่นด้วยเครื่องหมายจุลภาค

เนื่องจากตัวแยกต้องการแยกสิ่งต่าง ๆ จึงใช้รายการ "ภายใน" ในกรณีที่ 3 ในขณะที่ใช้รายการ "ภายนอก" ในกรณีที่ 1 และ 2

เพื่อแก้ไขปัญหา คุณสามารถลองทำได้หลายอย่าง:

  • เปลี่ยนตัวคั่นของรายการภายใน (ใช้เช่น - แทน ,) เพื่อให้ Camel ไม่คิดว่าพารามิเตอร์ flight ของคุณมีรายการในกรณีที่ 3
  • Add a flight parameter in Case 3 that is empty or contains a dummy value so that you always have an "outer" list.
    • Use a bean before the splitter and convert the parameter into a structure that is not mis-interpreted by the splitter

หากคุณไม่สามารถควบคุมพารามิเตอร์ URI ได้ คุณสามารถใช้ bean เพื่อใช้คำแนะนำข้อใดข้อหนึ่งจากสองข้อแรกได้

person burki    schedule 16.03.2018
comment
ขอบคุณ @burki ฉันไปกับการแปลงพารามิเตอร์และใช้งานได้ นี่เป็นคำแนะนำที่ดี - person wkrol; 16.03.2018