เมื่อฉันสร้างลูกค้าเว็บเซอร์โดยใช้ wsdl2java จาก CXF (ซึ่งสร้างบางอย่างที่คล้ายกับ wsimport) ผ่าน maven บริการของฉันเริ่มต้นด้วยรหัสเช่นนี้:
@WebServiceClient(name = "StatusManagement", 
                  wsdlLocation = "c:/some_absolute_path_to_a_wsdl_file.wsdl",
                  targetNamespace = "http://tempuri.org/") 
public class StatusManagement extends Service {
    public final static URL WSDL_LOCATION;
    public final static QName SERVICE = new QName("http://tempuri.org/", "StatusManagement");
    public final static QName WSHttpBindingIStatus = new QName("http://tempuri.org/", "WSHttpBinding_IStatus");
    static {
        URL url = null;
        try {
            url = new URL("c:/some_absolute_path_to_a_wsdl_file.wsdl");
        } catch (MalformedURLException e) {
            System.err.println("Can not initialize the default wsdl from c:/some_absolute_path_to_a_wsdl_file.wsdl");
            // e.printStackTrace();
        }
        WSDL_LOCATION = url;
    }เส้นทางสัมบูรณ์ hardcoded แย่จริงๆ คลาสที่สร้างขึ้นจะไม่ทำงานในคอมพิวเตอร์เครื่องอื่น ๆ
แนวคิดแรกคือการวางไฟล์ WSDL (รวมถึงทุกอย่างที่นำเข้า WSDL และ XSD อื่น ๆ ) ที่ใดที่หนึ่งในไฟล์ jar และ classpath แต่เราต้องการหลีกเลี่ยงสิ่งนี้ เนื่องจากทุกสิ่งนั้นถูกสร้างขึ้นโดย CXF และ JAXB ซึ่งอยู่ใน WSDLs และ XSD เราจึงไม่เห็นจุดที่ต้องรู้ WSDL ในขณะทำงาน
แอ็ตทริบิวต์ wsdlLocation มีวัตถุประสงค์เพื่อแทนที่ตำแหน่ง WSDL (อย่างน้อยนี่คือสิ่งที่ฉันได้อ่านที่ไหนสักแห่ง) และค่าเริ่มต้นคือ "" เนื่องจากเราใช้ maven เราจึงพยายามรวม<wsdlLocation></wsdlLocation>ไว้ในการกำหนดค่าของ CXF เพื่อพยายามบังคับให้เครื่องกำเนิดแหล่งที่มาปล่อยให้ wsdlLocation ว่าง อย่างไรก็ตามสิ่งนี้ทำให้ละเว้นแท็ก XML ได้เนื่องจากว่างเปล่า <wsdlLocation>" + "</wsdlLocation>เราได้สับน่าอับอายน่าเกลียดจริงๆใช้
นี่เป็นการเปลี่ยนแปลงสถานที่อื่นด้วย:
@WebServiceClient(name = "StatusManagement", 
                  wsdlLocation = "" + "",
                  targetNamespace = "http://tempuri.org/") 
public class StatusManagement extends Service {
    public final static URL WSDL_LOCATION;
    public final static QName SERVICE = new QName("http://tempuri.org/", "StatusManagement");
    public final static QName WSHttpBindingIStatus = new QName("http://tempuri.org/", "WSHttpBinding_IStatus");
    static {
        URL url = null;
        try {
            url = new URL("" + "");
        } catch (MalformedURLException e) {
            System.err.println("Can not initialize the default wsdl from " + "");
            // e.printStackTrace();
        }
        WSDL_LOCATION = url;
    }ดังนั้นคำถามของฉันคือ:
- เราต้องการตำแหน่ง WSDL จริง ๆ หรือไม่แม้ว่าจะสร้างคลาสทั้งหมดโดย CXF และ JAXB ถ้าใช่ทำไม 
- หากเราไม่ต้องการตำแหน่ง WSDL วิธีที่เหมาะสมและสะอาดในการทำให้ CXF ไม่สร้างและหลีกเลี่ยงมันคืออะไร? 
- มีผลข้างเคียงอะไรบ้างที่เราจะได้รับจากการแฮ็คนั้น เรายังไม่สามารถทดสอบสิ่งนั้นเพื่อดูว่าเกิดอะไรขึ้นดังนั้นหากใครบางคนสามารถบอกล่วงหน้าได้มันจะดี 
classpath:ใน<wsdlLocation...บรรทัด