ความแตกต่างระหว่าง Apache CXF และ Axis


คำตอบ:


229

โปรดจำไว้ว่าฉันมีอคติอย่างสมบูรณ์ (PMC Chair of CXF) แต่ความคิดของฉัน:

จากมุมมอง "โครงการสามารถทำสิ่งที่ฉันต้องการให้ทำ" อย่างเคร่งครัดทั้งสองมีความเท่าเทียมกัน มี "กรณีขอบ" บางอย่างที่ CXF สามารถทำได้โดยที่ Axis 2 ไม่สามารถและกลับกันได้ แต่สำหรับ 90% ของกรณีการใช้งานจะทำงานได้ดี

ดังนั้นจึงมีหลายสิ่งอื่นนอกเหนือจาก "คุณสมบัติกล่องกาเครื่องหมาย"

  • API - CXF ผลัก "API ตามมาตรฐาน" (ตามมาตรฐาน JAX-WS) ในขณะที่ Axis2 ทั่วไปมุ่งสู่สิ่งที่เป็นกรรมสิทธิ์ ที่กล่าวว่าแม้ CXF อาจต้องการการใช้ API ที่เป็นกรรมสิทธิ์เพื่อกำหนดค่า / ควบคุมสิ่งต่าง ๆ นอกข้อกำหนด JAX-WS สำหรับ REST นั้น CXF ยังใช้มาตรฐาน API (JAX-RS ที่สอดคล้องกับมาตรฐาน) แทนสิ่งที่เป็นกรรมสิทธิ์ (ใช่ฉันทราบถึง JAX-WS รันไทม์ใน Axis2 แต่เครื่องมือและเอกสารและทุกอย่างไม่ได้กำหนดเป้าหมาย)

  • ประเด็นด้านชุมชนและความช่วยเหลือ - CXF ภาคภูมิใจในการตอบสนองต่อปัญหาและทำให้ "ผู้ใช้" พร้อมใช้งานสำหรับผู้ใช้ CXF ทำ 12 fixpacks สำหรับ 2.0.x (เปิดตัวสองปีที่แล้วดังนั้นประมาณ 2 เดือน), 6 fixpacks ถึง 2.1.x และตอนนี้ 3 สำหรับ 2.2.x Axis2 ไม่ได้ "สนับสนุน" เวอร์ชันเก่ากว่าจริงๆ คุณอาจต้องรอจนกว่าจะถึงรุ่นใหญ่ครั้งถัดไป (พวกเขาเฉลี่ยประมาณทุก ๆ 9-10 เดือนหรือมากกว่านั้น) เพื่อรับการแก้ไข (แม้ว่าจะมีทั้งคุณสามารถคว้ารหัสที่มาและแก้ไข / แก้ไขด้วยตัวเองต้องรักโอเพนซอร์ส)

  • บูรณาการ - CXF มีการรวมสปริงที่ดีขึ้นมากถ้าคุณใช้สปริง การกำหนดค่าทั้งหมดและทำผ่านสปริง นอกจากนี้ผู้คนมักจะมองว่า CXF เป็น "แบบฝัง" (ฉันไม่เคยดู Axis2 จากมุมมองนี้) ไปยังแอปพลิเคชันอื่น ไม่แน่ใจว่าสิ่งที่ชอบสำหรับคุณ

  • ประสิทธิภาพ - ทั้งคู่ทำงานได้ดีมาก ฉันคิดว่าฐานข้อมูล ADB ที่เป็นกรรมสิทธิ์ของ Axis2 นั้นเร็วกว่า CXF เล็กน้อย แต่ถ้าคุณใช้ JAXB (API ตามมาตรฐานอีกครั้ง) CXF นั้นเร็วกว่าเล็กน้อย เมื่อใช้สถานการณ์ที่ซับซ้อนมากขึ้นเช่น WS-Security ความปลอดภัย "เอ็นจิ้น" (WSS4J) จะเหมือนกันสำหรับทั้งคู่ดังนั้นประสิทธิภาพจึงเทียบเท่ากันอย่างสมบูรณ์

ไม่แน่ใจว่าตอบคำถามได้หรือไม่ หวังว่าอย่างน้อยก็ให้ข้อมูลบางอย่าง

:-)

แดน


10
การเปรียบเทียบเมื่อเร็ว ๆ นี้จากจุดยืน WS-Security: ibm.com/developerworks/java/library/j-jws19/index.html
Daniel Kulp

พอยน์เตอร์ใดที่ทำให้การสื่อสาร HTTP เร็วขึ้นเมื่อใช้ CXF ภายในอินทราเน็ต เชื่อมต่อกับ 8 Webservices ผ่าน lan
tgkprog

57
  • Axis2 : แพร่หลายมากขึ้นในตลาดรองรับการผูกเพิ่มเติมรองรับภาษาอื่น ๆ เช่น C / C ++
  • CXF : ใช้งานง่ายขึ้นเป็นมิตรกับฤดูใบไม้ผลิเพิ่มการสนับสนุนส่วนขยาย WS- * บางส่วนได้เร็วขึ้น

การเปรียบเทียบที่อ้างอิงไม่สามารถใช้งานได้อีกต่อไป: "ลบเนื้อหาที่อัปโหลดแล้ว"
maiklos

5
+1 เพื่อการใช้งานที่ง่ายกว่ามาก IMO, CXF ยังมีรายละเอียดน้อยกว่าเมื่อสร้างคลาสพื้นฐานสำหรับ WS / WS-client จาก WSDL ไคลเอนต์ Axis จำเป็นต้องมีโค้ดจำนวนมากที่ยากต่อการเข้าใจและหักเหเมื่อเทียบกับ CXF
Priidu Neemre

42

อีกสิ่งหนึ่งคือกิจกรรมของชุมชน เปรียบเทียบทราฟฟิกรายการส่งเมลสำหรับ Axis และ cxf (2013)

ดังนั้นหากนี่คือตัวบ่งชี้การใช้งานดังนั้นแกนจึงใช้งานน้อยกว่า cxf

เปรียบเทียบ CXF และแกนสถิติที่ Ohloh CXF มีกิจกรรมที่สูงมากในขณะที่ Axis มีกิจกรรมโดยรวมต่ำ

นี่คือแผนภูมิสำหรับจำนวนการคอมมิทชั่นเมื่อเวลาผ่านไปสำหรับ CXF (สีแดง) และ Axis1 (สีเขียว) Axis2 (สีฟ้า) ป้อนคำอธิบายรูปภาพที่นี่


24

ข้อดีของ CXF:

  1. CXF รองรับ WS-Addressing, WS-Policy, WS-RM, WS-Security และ WS-I BasicProfile
  2. CXF ใช้ JAX-WS API (ตาม JAX-WS 2.0 TCK)
  3. CXF มีการรวมที่ดีขึ้นกับ Spring และเฟรมเวิร์กอื่น ๆ
  4. CXF มีความสามารถในการขยายตัวสูงในแง่ของกลยุทธ์ interceptor
  5. CXF มีคุณสมบัติที่กำหนดค่าได้มากกว่าผ่านทาง API แทนที่จะเป็นไฟล์ XML ที่ยุ่งยาก
  6. CXF มี Bindings: SOAP, REST / HTTP และ Data Bindings รองรับ JAXB 2.0, Aegis โดยค่าเริ่มต้นจะใช้ JAXB 2.0 และใกล้เคียงกับข้อกำหนดมาตรฐาน Java มากขึ้น
  7. CXF มีชุดเครื่องมือมากมายเช่น Java ถึง WSDL, WSDL ถึง Java, XSD ถึง WSDL, WSDL ถึง XML, WSDL to SOAP, WSDL to Service

ข้อดีของ Axis2:

  1. Axis2 ยังรองรับ WS-RM, WS-Security และ WS-I BasicProfile ยกเว้นนโยบาย WS- ฉันคาดว่ามันจะได้รับการสนับสนุนในรุ่นที่กำลังจะมาถึง
  2. Axis มีตัวเลือกเพิ่มเติมสำหรับการผูกข้อมูลสำหรับการเลือกของคุณ
  3. Axis2 รองรับหลายภาษารวมถึงรุ่น C / C ++ และรุ่น Java
  4. Axis2 รองรับการเชื่อมโยงข้อมูลที่หลากหลายรวมถึง XMLBeans, JiBX, JaxMe และ JaxBRI รวมถึง ADB ประวัติศาสตร์ที่ยาวนานกว่า CXF

โดยสรุป:จากรายการที่ได้เปรียบข้างต้นมันทำให้เรามีความคิดที่ดีในการเปรียบเทียบ Axis2 และ CXF กับข้อดีของพวกเขาเอง พวกเขาทั้งหมดมีพื้นที่ที่ได้รับการพัฒนาที่แตกต่างกันในบางสาขา CXF นั้นสามารถกำหนดค่าได้อย่างมากผสานรวมและมีชุดเครื่องมือที่หลากหลายและได้รับการสนับสนุนและใกล้กับชุมชน Java, Axis2 ได้ใช้วิธีการที่ทำให้มีลักษณะคล้ายกับ มันเป็นภาษาการเขียนโปรแกรมหลายภาษา เนื่องจากความเป็นอิสระ Axis2 จึงให้ยืมตัวเองไปยังบริการเว็บที่โดดเดี่ยวเป็นอิสระจากแอพพลิเคชั่นอื่น ๆ และมีฟังก์ชั่นที่หลากหลาย

ในฐานะนักพัฒนาเราต้องให้มุมมองของเราในการเลือกสิ่งที่ถูกต้องไม่ว่าคุณจะเลือกกรอบงานใดคุณจะได้รับประโยชน์จากชุมชนโอเพ่นซอร์สที่มีเสถียรภาพ ในแง่ของประสิทธิภาพฉันทำการทดสอบตามฟังก์ชั่นเดียวกันและกำหนดค่าในเว็บคอนเทนเนอร์เดียวกันผลลัพธ์แสดงว่า CXF ทำงานได้ดีกว่า Axis2 เล็กน้อยเคสเดียวอาจไม่สะท้อนความสามารถและประสิทธิภาพของพวกเขา

ในบทความวิจัยบางเรื่องพบว่าการสร้างฐานข้อมูล ADB ที่เป็นกรรมสิทธิ์ของ Axis2 นั้นเร็วกว่า CXF เล็กน้อยเนื่องจากไม่มีคุณสมบัติเพิ่มเติม (WS-Security) Apache AXIS2 เป็นเฟรมเวิร์กที่ใช้มากที่สุด แต่ Apache CXF มีคะแนนเหนือกว่า Web Services Framework อื่น ๆ เมื่อเปรียบเทียบกับความง่ายในการพัฒนาแนวโน้มของอุตสาหกรรมในปัจจุบันประสิทธิภาพการทำงานดัชนีชี้วัดโดยรวมและคุณสมบัติอื่น ๆ (เว้นแต่มีการสนับสนุน )


2

ตามประสบการณ์ของฉัน CXF นั้นดีในแง่ของการกำหนดค่าให้เข้ากับสภาพแวดล้อมของสปริง นอกจากนี้คลาสที่สร้างนั้นง่ายต่อการเข้าใจ และเนื่องจากมันใช้งานได้มากกว่าเราได้รับการสนับสนุนที่ดีกว่าเมื่อเปรียบเทียบกับ AXIS หรือ AXIS2


1

ข้อดีอีกประการของ CXF: เชื่อมต่อกับเว็บเซิร์ฟเวอร์โดยใช้การพิสูจน์ตัวตน NTLMV2 นอกกรอบ (ใช้โดย Windows 2008 และสูงกว่า) ก่อนใช้ CXF ฉันแฮ็ก Axis2 เพื่อใช้ HTTPClient V4 + JCIFS เพื่อให้เป็นไปได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.