เมื่อ TrustManagerFactory ไม่ใช่ TrustManagerFactory (Java)

ฉันกำลังพยายามเพิ่มการทดสอบ JUnit เพิ่มเติมให้กับผลิตภัณฑ์ App-Server (TomCat) ที่มีอยู่ ฉันพบปัญหากับ TrustManager แบบกำหนดเอง (ที่มีอยู่และสอดแทรก) สิ่งนี้ทำงานได้ดีในการผลิต แต่ระหว่าง JUnit ให้ข้อยกเว้น

TrustManager ที่ปรับแต่งเฉพาะจะโหลดที่เก็บคีย์จากเส้นทาง และเชื่อถือใบรับรองสาธารณะของเราโดยปริยาย ด้วยเหตุผลบางประการ การใช้สิ่งนี้ใน JUnits ทำให้เกิดข้อยกเว้นในบรรทัดต่อไปนี้:

TrustManagerFactory tmFactory = TrustManagerFactory.getInstance("PKIX");    

ข้อยกเว้น:

java.security.NoSuchAlgorithmException:  class configured for TrustManagerFactory: com.sun.net.ssl.internal.ssl.TrustManagerFactoryImpl$PKIXFactory not a TrustManagerFactory

ข้อยกเว้นนี้เกิดขึ้นไม่ว่าจะใช้ชุดผู้ให้บริการ/อัลกอริทึมใด ("SunX509", .getDefaultAlgorithm() et al.)

ข้อมูลเชิงลึกใด ๆ จะได้รับการชื่นชมอย่างมาก


person David Beveridge    schedule 01.02.2013    source แหล่งที่มา
comment
AFAICT ไอเดียกำลังใช้ %JAVA_HOME% ซึ่งแก้ไขเป็น: java version "1.6.0_23" Java(TM) SE Runtime Environment (build 1.6.0_23-b05) Java HotSpot(TM) 64-Bit Server VM (build 19.0-b09, mixed mode)   -  person David Beveridge    schedule 02.02.2013
comment
ดูเหมือนว่า JUnit ทำให้การกำหนดค่าผู้ให้บริการความปลอดภัยเกิดความสับสน   -  person user207421    schedule 02.02.2013
comment
หากคุณหมายถึงผู้ให้บริการ พวกเขาดูเหมือนตกลง (ฉันสามารถอ่านและค้นหา PKIX ภายใต้ทั้ง BC และ SunX509 เป็นต้น) . . . ซึ่งมันแปลก   -  person David Beveridge    schedule 02.02.2013
comment
คุณมีโอกาสใดบ้างที่มีไฟล์ JSSE jar เก่าจาก 1.3 วันติดตั้งที่ไหนสักแห่งใน CLASSPATH โดยที่ JUnit สามารถมองเห็นได้ แต่การผลิตไม่สามารถทำได้? ถ้าเป็นเช่นนั้นให้ถอดออก   -  person user207421    schedule 02.02.2013
comment
ไม่ไกลเท่าที่ฉันสามารถบอกได้ สิ่งที่แปลกคือ: ฉันย้ายฟังก์ชันเริ่มต้น SSL ไปยังคลาสอื่นและปัญหาของ TrustManager ก็หายไป ไม่รู้ว่าทำไม ›_‹   -  person David Beveridge    schedule 06.02.2013
comment
ตัวอย่างที่สมบูรณ์แบบของข้อความยกเว้น Java ที่คลุมเครือ   -  person Calicoder    schedule 10.01.2021


คำตอบ (1)


ดูเหมือนว่า PowerMock จะเกิดปัญหากับ SSL และทำให้คุณพบปัญหาในการโหลดโรงงานที่ไม่ถูกต้อง วิธีแก้ปัญหาคือการใช้คำอธิบายประกอบในคลาสทดสอบ:

@PowerMockIgnore("javax.net.ssl.*")

สิ่งนี้นำมาจาก https://groups.google.com/forum/#!topic/powermock/v4nreP2AnOQ< /ก>

person GBa    schedule 29.05.2014
comment
สมบูรณ์แบบ :) ขอบคุณ! - person CoderSpinoza; 26.08.2016