チェンジセット 284

差分発生行の前後
無視リスト:
コミット日時:
2008/04/18 12:14:32 (14 年前)
コミッタ:
shinomiya
ログメッセージ:

CodeGenerationEngine?CodeGenConfiguration?の取得方法を変更。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/im-jssp/src/main/java/org/intra_mart/jssp/script/api/SOAPClientObject.java

    r283 r284  
    6464import org.mozilla.javascript.JavaScriptException; 
    6565import org.mozilla.javascript.ScriptableObject; 
    66 import org.mozilla.javascript.WrappedException; 
    6766import org.w3c.dom.Document; 
    6867import org.w3c.dom.Element; 
     
    128127        } 
    129128 
     129        /** 
     130         * @param object 
     131         * @return 
     132         */ 
    130133        private static String getURI4WSDL(Object object) { 
    131134                String wsdlUri = null; 
     
    149152        } 
    150153 
     154        /** 
     155         * @param wsdlUri 
     156         * @param targetEndpoint 
     157         * @param portName 
     158         * @param serviceName 
     159         */ 
    151160        public SOAPClientObject(String wsdlUri, 
    152161                                                        String targetEndpoint, 
     
    158167                if(StubGenerationMode.Never.equals(_stubGenMode) == false){ 
    159168                         
     169                        // 「JSの実行スレッドに紐づくクラスローダ」と「jsToJavaBean()実行時のクラスローダ」を同じにする 
    160170                        ClassLoader oldExtendedClassLoader = _soapClientClassLoaderThreadLocal.get(); 
    161171                        if(oldExtendedClassLoader != null){ 
     
    172182 
    173183                try { 
    174                         // エンジン生成 
    175                         CodeGenerationEngine engine = createEngine(wsdlUri, _soapClientWorkDir, portName, serviceName); 
     184                        // コンフィグ生成 
     185                        CodeGenConfiguration config = getCodeGenConfiguration(wsdlUri, _soapClientWorkDir, portName, serviceName); 
    176186                         
    177187                        // Stubクラス名取得 
    178                         String stubClassName = getStubClassName(engine); 
     188                        String stubClassName = getStubClassName(config); 
    179189                         
    180190                        if( StubGenerationMode.Everytime.equals(_stubGenMode) 
     
    183193                        ){ 
    184194                                // Stubソース生成 
    185                                 generateStub(engine, stubClassName); 
     195                                generateStub(wsdlUri, _soapClientWorkDir, portName, serviceName, stubClassName); 
    186196 
    187197                                // Stubクラスコンパイル 
     
    204214                } 
    205215                catch (Exception e) { 
    206                         throw new WrappedException(e); 
     216                        throw Context.throwAsScriptRuntimeEx(e); 
    207217                } 
    208218                finally{ 
     
    250260                ClassLoader cl = (classLoader != null) ?  classLoader : getCurrentThreadClassLoader4SOAPClient(); 
    251261                 
    252                 Class stubClass = cl.loadClass(stubClassName); 
     262                Class<?> stubClass = cl.loadClass(stubClassName); 
    253263                if(endpoint == null){ 
    254264                        return stubClass.newInstance(); 
    255265                } 
    256266                else{ 
    257                         Constructor stubConstructor = stubClass.getConstructor(String.class); 
     267                        Constructor<?> stubConstructor = stubClass.getConstructor(String.class); 
    258268                        return stubConstructor.newInstance(endpoint); 
    259269                } 
     
    270280                } 
    271281                else { 
    272                         String workDir = getTagsTextContentFormNodeList(tagName); 
     282                        String workDir = getConfigValue(tagName); 
    273283                        if(workDir != null){ 
    274284                                File dir = new File(workDir); 
     
    297307                } 
    298308                else{ 
    299                         String configValue = getTagsTextContentFormNodeList(tagName); 
     309                        String configValue = getConfigValue(tagName); 
    300310                         
    301311                        if(configValue != null){ 
     
    328338                } 
    329339                else{ 
    330                         String configValue = getTagsTextContentFormNodeList(tagName); 
     340                        String configValue = getConfigValue(tagName); 
    331341                         
    332342                        if(configValue != null){ 
     
    348358                } 
    349359                else{ 
    350                         String configValue = getTagsTextContentFormNodeList(tagName); 
     360                        String configValue = getConfigValue(tagName); 
    351361                         
    352362                        if(configValue != null){ 
     
    359369        } 
    360370 
    361         private static String getTagsTextContentFormNodeList(String tagName) { 
    362                 JSSPConfigHandler config = JSSPConfigHandlerManager.getConfigHandler(); 
    363                 NodeList list = config.getJavaScriptAPI4ClassConfig(SOAPClientObject.class.getName()); 
    364                  
    365                 for(int idx = 0; idx < list.getLength(); idx++){ 
    366                         Element elem = (Element) list.item(idx); 
    367                         if(tagName.equals(elem.getTagName())){ 
    368                                 return elem.getTextContent(); 
    369                         } 
    370                 } 
    371                  
    372                 return null; 
    373         } 
    374  
    375         private static Map<String, CodeGenerationEngine> cache4codeGenEngine = new WeakHashMap<String, CodeGenerationEngine>(); 
    376  
    377         private CodeGenerationEngine createEngine(String wsdlLocationURI,  
    378                                                                                           File outputLocation, 
    379                                                                                           String portName, 
    380                                                                                           String serviceName ) throws CodeGenerationException { 
     371        /** 
     372         * @param wsdlLocationURI 
     373         * @param outputLocation 
     374         * @param portName 
     375         * @param serviceName 
     376         * @return 
     377         */ 
     378        private CodeGenConfiguration getCodeGenConfiguration(String wsdlLocationURI,  
     379                                                                                                                  File outputLocation, 
     380                                                                                                                  String portName, 
     381                                                                                                                  String serviceName) { 
     382                 
     383 
     384                CodeGenConfiguration codeGenConfiguration; 
     385                try { 
     386                        // エンジン生成 
     387                        CodeGenerationEngine engine = getCachedCodeGenEngine(wsdlLocationURI, _soapClientWorkDir, portName, serviceName); 
     388 
     389                        // PLAN JavassistでCodeGenerationEngine#getConfiguration()メソッドが生成されなかった場合の処理の追加。          
     390                        codeGenConfiguration = (CodeGenConfiguration) _method4getConfiguration.invoke(engine); 
     391                } 
     392                catch (Exception e) { 
     393                        throw Context.throwAsScriptRuntimeEx(e); 
     394                } 
     395                 
     396                return codeGenConfiguration; 
     397        } 
     398 
     399        /** 
     400         * CodeGenerationEngineの取得。(キャッシュあり) 
     401         *  
     402         * @param wsdlLocationURI 
     403         * @param outputLocation 
     404         * @param portName 
     405         * @param serviceName 
     406         * @return 
     407         * @throws CodeGenerationException 
     408         */ 
     409        private CodeGenerationEngine getCachedCodeGenEngine(String wsdlLocationURI,  
     410                                                                                                  File outputLocation, 
     411                                                                                                  String portName, 
     412                                                                                                  String serviceName ) throws CodeGenerationException { 
    381413                 
    382414                CodeGenerationEngine engine = cache4codeGenEngine.get(wsdlLocationURI); 
     
    385417                        synchronized(cache4codeGenEngine){ 
    386418                                // 引数を作成 
    387                                 String[] args = generateArgs(wsdlLocationURI, outputLocation, portName, serviceName); 
     419                                List<String> argsList = new ArrayList<String>(); 
     420                                argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.OUTPUT_LOCATION_OPTION_LONG); 
     421                                argsList.add(outputLocation.getAbsolutePath()); 
     422                                argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.WSDL_LOCATION_URI_OPTION); 
     423                                argsList.add(wsdlLocationURI); 
     424                                argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.SOURCE_FOLDER_NAME_OPTION_LONG); 
     425                                argsList.add(""); // ←「src」ディレクトリを作らない 
     426                                argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.NO_BUILD_XML_OPTION_LONG); 
     427                                argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.OVERRIDE_OPTION_LONG); 
    388428                                 
    389                  
     429                                if(portName != null){ 
     430                                argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.PORT_NAME_OPTION_LONG); 
     431                                argsList.add(portName); 
     432                                } 
     433                                 
     434                                if(serviceName != null){ 
     435                                argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.SERVICE_NAME_OPTION_LONG); 
     436                                argsList.add(serviceName); 
     437                                } 
     438                                 
     439                                String[] args = argsList.toArray(new String[argsList.size()]); 
     440                                _logger.trace("argsList: {}", argsList); 
     441                                 
    390442                                // CodeGenerationEngineを生成 () 
    391443                                CommandLineOptionParser commandLineOptionParser = new CommandLineOptionParser(args); 
     
    399451                return engine; 
    400452        } 
    401  
    402         private boolean isExistStubClass(String stubFQCN) { 
    403                 // スタブクラスの存在チェック 
    404                 boolean isExistStubClass = false; 
    405                 try { 
    406                         Class<?> clazz = getCurrentThreadClassLoader4SOAPClient().loadClass(stubFQCN); 
    407                         if(clazz != null){ 
    408                                 isExistStubClass = true; 
    409                         } 
    410                 } 
    411                 catch (ClassNotFoundException e) { /* Do Nothing */ } 
    412                 return isExistStubClass; 
    413         } 
    414  
    415         private boolean isExistStubJS(String stubClassName, File srcDir) { 
    416  
    417                 ScriptScope scope; 
    418                 try { 
    419                         scope = getScriptScope(stubClassName, srcDir); 
    420                         if(scope != null){ 
    421                                 return true; 
    422                         } 
    423                         else{ 
    424                                 return false; 
    425                         } 
    426                 } 
    427                 catch (Exception e) { 
    428                         _logger.trace(e.getMessage(), e); 
    429                         return false; 
    430                 } 
    431         } 
    432  
    433         private ScriptScope getScriptScope(String stubClassName, File srcDir)  
    434                                                                 throws FileNotFoundException, 
    435                                                                                 InstantiationException,  
    436                                                                                 IllegalAccessException,  
    437                                                                                 IOException, 
    438                                                                                 ClassNotFoundException { 
    439                  
    440                 ScriptScopeBuilder builder = ScriptScopeBuilderManager.getBuilder(); 
    441                 String source = stubClassName.replace(".", File.separator); 
    442                 ScriptScope scope = builder.getScriptScope(source, srcDir); 
    443                 return scope; 
    444         } 
     453        private static Map<String, CodeGenerationEngine> cache4codeGenEngine = new WeakHashMap<String, CodeGenerationEngine>(); 
    445454 
    446455         
    447         private String getStubClassName(CodeGenerationEngine engine) { 
    448                  
    449                 CodeGenConfiguration codeGenConfiguration; 
    450                 try { 
    451                         // PLAN JavassistでCodeGenerationEngine#getConfiguration()メソッドが生成されなかった場合の処理の追加。          
    452                         codeGenConfiguration = (CodeGenConfiguration) _method4getConfiguration.invoke(engine); 
    453                 } 
    454                 catch (Exception e) { 
    455                         throw Context.throwAsScriptRuntimeEx(e); 
    456                 } 
    457  
     456        private String getStubClassName(CodeGenConfiguration codeGenConfiguration) { 
     457                 
    458458                // スタブのクラス名を取得 
    459459                // AxisServiceが複数存在しても、特定の一つのWebサービスに対するスタブを対象とする。 
     
    471471        } 
    472472 
    473         private String[] generateArgs(String wsdlLocationURI, File outputLocation, 
    474                                                                           String portName, String serviceName) { 
    475                  
    476                 List<String> argsList = new ArrayList<String>(); 
    477  
    478                 argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.OUTPUT_LOCATION_OPTION_LONG); 
    479                 argsList.add(outputLocation.getAbsolutePath()); 
    480                 argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.WSDL_LOCATION_URI_OPTION); 
    481                 argsList.add(wsdlLocationURI); 
    482                 argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.SOURCE_FOLDER_NAME_OPTION_LONG); 
    483                 argsList.add(""); // ←「src」ディレクトリを作らない 
    484                 argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.NO_BUILD_XML_OPTION_LONG); 
    485                 argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.OVERRIDE_OPTION_LONG); 
    486  
    487                 if(portName != null){ 
    488                         argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.PORT_NAME_OPTION_LONG); 
    489                         argsList.add(portName); 
    490                 } 
    491                  
    492                 if(serviceName != null){ 
    493                         argsList.add("-" + CommandLineOptionConstants.WSDL2JavaConstants.SERVICE_NAME_OPTION_LONG); 
    494                         argsList.add(serviceName); 
    495                 } 
    496                                  
    497                 _logger.trace("argsList: {}", argsList); 
    498  
    499                 String[] args = argsList.toArray(new String[argsList.size()]); 
    500                 return args; 
    501         } 
    502  
    503         protected synchronized void generateStub(CodeGenerationEngine engine, String stubClassName) throws CodeGenerationException { 
     473         
     474        private static String getConfigValue(String tagName) { 
     475                JSSPConfigHandler config = JSSPConfigHandlerManager.getConfigHandler(); 
     476                NodeList list = config.getJavaScriptAPI4ClassConfig(SOAPClientObject.class.getName()); 
     477                 
     478                for(int idx = 0; idx < list.getLength(); idx++){ 
     479                        Element elem = (Element) list.item(idx); 
     480                        if(tagName.equals(elem.getTagName())){ 
     481                                return elem.getTextContent(); 
     482                        } 
     483                } 
     484                 
     485                return null; 
     486        } 
     487 
     488        private boolean isExistStubClass(String stubFQCN) { 
     489                // スタブクラスの存在チェック 
     490                boolean isExistStubClass = false; 
     491                try { 
     492                        Class<?> clazz = getCurrentThreadClassLoader4SOAPClient().loadClass(stubFQCN); 
     493                        if(clazz != null){ 
     494                                isExistStubClass = true; 
     495                        } 
     496                } 
     497                catch (ClassNotFoundException e) { /* Do Nothing */ } 
     498                return isExistStubClass; 
     499        } 
     500 
     501        private boolean isExistStubJS(String stubClassName, File srcDir) { 
     502 
     503                ScriptScope scope; 
     504                try { 
     505                        scope = getScriptScope(stubClassName, srcDir); 
     506                        if(scope != null){ 
     507                                return true; 
     508                        } 
     509                        else{ 
     510                                return false; 
     511                        } 
     512                } 
     513                catch (Exception e) { 
     514                        _logger.trace(e.getMessage(), e); 
     515                        return false; 
     516                } 
     517        } 
     518 
     519        private ScriptScope getScriptScope(String stubClassName, File srcDir)  
     520                                                                throws FileNotFoundException, 
     521                                                                                InstantiationException,  
     522                                                                                IllegalAccessException,  
     523                                                                                IOException, 
     524                                                                                ClassNotFoundException { 
     525                 
     526                ScriptScopeBuilder builder = ScriptScopeBuilderManager.getBuilder(); 
     527                String source = stubClassName.replace(".", File.separator); 
     528                ScriptScope scope = builder.getScriptScope(source, srcDir); 
     529                return scope; 
     530        } 
     531 
     532        /** 
     533         * Javaスタブのソースコード生成 
     534         *  
     535         * @param wsdlUri 
     536         * @param stubClassName 
     537         * @throws CodeGenerationException 
     538         */ 
     539        protected synchronized void generateStub(String wsdlLocationURI,  
     540                                                                                          File outputLocation, 
     541                                                                                          String portName, 
     542                                                                                          String serviceName,    
     543                                                                                          String stubClassName) throws CodeGenerationException { 
    504544                _logger.info("Generate Stub(Java): {}", stubClassName); 
     545                 
     546                // エンジン生成 
     547                CodeGenerationEngine engine = getCachedCodeGenEngine(wsdlLocationURI, _soapClientWorkDir, portName, serviceName); 
    505548                engine.generate(); 
    506549        } 
    507550 
     551        /** 
     552         * Javaスタブをコンパイル 
     553         *  
     554         * @param className 
     555         * @param srcDir 
     556         * @param destDir 
     557         * @return 
     558         * @throws IOException 
     559         */ 
    508560        protected synchronized int compileStub(String className, File srcDir, File destDir) throws IOException{ 
    509561             
     
    604656        private static final String code4ClassLoader = name4SOAPClientObject + ".getCurrentThreadClassLoader4SOAPClient();"; 
    605657 
     658        /** 
     659         * JSスタブのソースコード生成 
     660         *  
     661         * @param wsdlUri 
     662         * @param stubClassName 
     663         * @param destDir 
     664         * @throws IOException 
     665         * @throws IntrospectionException 
     666         * @throws ClassNotFoundException 
     667         * @throws NoSuchFieldException 
     668         * @throws IllegalArgumentException 
     669         * @throws IllegalAccessException 
     670         * @throws XPathExpressionException 
     671         * @throws ParserConfigurationException 
     672         * @throws SAXException 
     673         */ 
    606674        protected synchronized void generateStubJS(String wsdlUri, String stubClassName, File destDir)  
    607675                                                                        throws IOException, IntrospectionException, ClassNotFoundException,  
     
    9651033        } 
    9661034 
     1035        /** 
     1036         * JSスタブのinit()関数実行 
     1037         *  
     1038         * @param stubClassName 
     1039         * @param srcDir 
     1040         * @param targetEndpoint 
     1041         * @throws JavaScriptException 
     1042         * @throws FileNotFoundException 
     1043         * @throws InstantiationException 
     1044         * @throws IllegalAccessException 
     1045         * @throws IOException 
     1046         * @throws ClassNotFoundException 
     1047         */ 
    9671048        protected void executeStubJS(String stubClassName, File srcDir, String targetEndpoint) throws JavaScriptException, FileNotFoundException, InstantiationException, IllegalAccessException, IOException, ClassNotFoundException { 
    9681049                ScriptScope scope = getScriptScope(stubClassName, srcDir); 
     
    9731054        } 
    9741055 
     1056        /** 
     1057         * Axis2のクラスパス解決 
     1058         * @return 
     1059         */ 
    9751060        protected String getAxis2ClassPath() {           
    9761061                if(classPath4Axis2 == null){ 
     
    10601145        } 
    10611146 
     1147        /** 
     1148         *  
     1149         */ 
    10621150        private static void createCodeGenConfigurationGetterByJavassist(){ 
    10631151                try { 
     
    10861174        } 
    10871175 
     1176        /** 
     1177         * @return 
     1178         */ 
    10881179        private static boolean isWindows(){ 
    10891180                String os = System.getProperty("os.name"); 
     
    10971188        } 
    10981189 
     1190        /** 
     1191         * @param wsdlUrl 
     1192         * @param operationParamType 
     1193         * @return 
     1194         * @throws ParserConfigurationException 
     1195         * @throws IOException 
     1196         * @throws XPathExpressionException 
     1197         * @throws SAXException 
     1198         */ 
    10991199        private static List<String> getPropertyNameListFromWSDL(String wsdlUrl, Class<?> operationParamType)  
    11001200                                                throws ParserConfigurationException, IOException, XPathExpressionException, SAXException{