Eclipse中找不到such setBillType(Ljava/lang/String;)V

本文介绍了在使用Tomcat自动编译时遇到的代码无法正确编译和打包的问题,详细阐述了如何通过删除并重新添加Tomcat项目来解决这一难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MAVEN已经重新更新项目\ 所有项目重新编译  maven进行clean 还有install  都已经搞了 还是找不到这个方法

最后想到是tomcat里面包的问题


tomcat使用多了自动编译 有的时候代码编译打包不进去 这个问题遇到过好几次\每次耗费好多时间  留个纪念  以后好找问题


解决方法直接干掉tomca 重新添加tomcat重新添加项目



setBillType(Ljava/lang/String;)V



明明bean里面有这个GET set方法 启动总是报错

解决方法:删除tomcat项目 重新加载

TOMCAT追加内存   -Xms2048M -Xmx2048M -XX:PermSize=2048m -XX:MaxPermSize=2048m

collections-3.2.2.jar:/app/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/ordosjfappCell01/appgate_war.ear/appgate.war Parent: com.ibm.ws.classloader.CompoundClassLoader@1f4260c1[PF][app:appgate_war] Delegation Mode: PARENT_FIRST). [25-5-29 17:05:38:671 CST] 000000bc SystemErr R at org.apache.cxf.common.xmlschema.SchemaCollection.read(SchemaCollection.java:133) [25-5-29 17:05:38:671 CST] 000000bc SystemErr R at org.apache.cxf.databinding.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:192) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.databinding.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:95) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:349) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:444) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:690) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:507) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:241) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:205) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:153) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:151) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at com.uxunchina.appgate.socket.client.WebServiceClient_UXUNJFYSmgService.createIjfyFrontService(WebServiceClient_UXUNJFYSmgService.java:37) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at com.uxunchina.appgate.socket.client.WebServiceClientUtils.qurshortmsg(WebServiceClientUtils.java:315) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at com.uxunchina.appgate.utils.UxunScanMsg$UxunXFSmg.run(UxunScanMsg.java:53) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at java.util.TimerThread.mainLoop(Timer.java:566) [25-5-29 17:05:38:672 CST] 000000bc SystemErr R at java.util.TimerThread.run(Timer.java:516) [25-5-30 15:05:34:755 CST] 000000ba SystemErr R java.net.SocketException: Socket closed [25-5-30 15:05:34:755 CST] 000000ba SystemErr R at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:450) [25-5-30 15:05:34:755 CST] 000000ba SystemErr R at java.net.ServerSocket.implAccept(ServerSocket.java:623) [25-5-30 15:05:34:755 CST] 000000ba SystemErr R at java.net.ServerSocket.accept(ServerSocket.java:582) [25-5-30 15:05:34:755 CST] 000000ba SystemErr R at com.uxunchina.appgate.socket.UxunSocketServerInit.run(UxunSocketServerInit.java:41) [25-5-30 15:05:34:755 CST] 000000ba SystemErr R at java.lang.Thread.run(Thread.java:785) [25-5-30 15:07:58:551 CST] 000000b8 SystemErr R java.net.BindException: Address already in use [25-5-30 15:07:58:551 CST] 000000b8 SystemErr R at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:417) [25-5-30 15:07:58:551 CST] 000000b8 SystemErr R at java.net.ServerSocket.bind(ServerSocket.java:444) [25-5-30 15:07:58:551 CST] 000000b8 SystemErr R at java.net.ServerSocket.<init>(ServerSocket.java:258) [25-5-30 15:07:58:551 CST] 000000b8 SystemErr R at java.net.ServerSocket.<init>(ServerSocket.java:149) [25-5-30 15:07:58:551 CST] 000000b8 SystemErr R at com.uxunchina.appgate.socket.ESB2JFYSocketServerInit.run(ESB2JFYSocketServerInit.java:35) [25-5-30 15:07:58:551 CST] 000000b8 SystemErr R at java.lang.Thread.run(Thread.java:785) [25-5-30 15:08:04:822 CST] 0000006d SystemErr R log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender. [25-5-30 15:08:05:173 CST] 0000006d SystemErr R log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender. [25-5-30 15:08:11:060 CST] 0000006b SystemErr R log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender. [25-5-30 15:08:11:061 CST] 0000006b SystemErr R log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender. [25-5-30 15:09:00:860 CST] 000000b9 SystemErr R Exception in thread "Timer-8" java.lang.NoSuchMethodError: org/apache/ws/commons/schema/XmlSchemaCollection.read(Lorg/w3c/dom/Document;Ljava/lang/String;)Lorg/apache/ws/commons/schema/XmlSchema; (loaded from file:/app/IBM/WebSphere/AppServer/plugins/org.apache.axis2.jar by org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@853b4477[org.apache.axis2:7.0.0(id=298)]) called from class org.apache.cxf.common.xmlschema.SchemaCollection (loaded from file:/app/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/ordosjfappCell01/appgate_war.ear/appgate.war/WEB-INF/lib/cxf-common-utilities-2.4.10.jar by com.ibm.ws.classloader.CompoundClassLoader@ef9e9231[war:appgate_war/appgate.war] Local ClassPath: /app/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/ordosjfappCell01/appgate_war.ear/appgate.war/WEB-INF/classes:/app/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/ordosjfappCell01/appgate_war.ear/appgate.war/WEB-
最新发布
07-16
<think>我们正在分析Smali代码中字符串拼接的逻辑,特别是使用StringBuilder的append方法的情况。 在Java中,字符串拼接通常会被编译器优化为使用StringBuilder,以避免创建多个临时字符串对象。在Smali代码中,我们可以看到对应的StringBuilder操作。 步骤: 1. 创建StringBuilder对象:通常使用new-instance指令创建StringBuilder实例,然后调用其构造方法。 2. 调用append方法:多次调用append方法将各个部分添加到StringBuilder中。 3. 最后调用toString方法:将StringBuilder对象转换为字符串。 在Smali中,这些操作会表现为一系列的invoke指令(如invoke-direct, invoke-virtual)和对象操作指令(new-instance, const-string等)。 示例分析: 假设我们有如下Java代码: String str = "a" + "b" + "c"; 在编译后,它会被转换为类似以下代码: StringBuilder sb = new StringBuilder(); sb.append("a&quot;); sb.append("b&quot;); sb.append("c&quot;); String str = sb.toString(); 在Smali中,这段代码可能如下所示: 注意:Smali代码中寄存器使用(如v0, v1等)和指令的详细步骤。 代码示例: 我们逐条分析Smali指令: 1. 创建StringBuilder实例: new-instance v0, Ljava/lang/StringBuilder; # 创建StringBuilder对象,引用存储在v0 invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V # 调用构造方法 2. 拼接字符串"a": const-string v1, "a" # 将字符串常量"a"加载到寄存器v1 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; # 调用append方法,注意返回值是StringBuilder本身,但通常我们忽略返回值(因为不需要链式调用时,可以丢弃) 注意:append方法返回StringBuilder对象本身(用于链式调用),但在Smali中,如果我们不需要这个返回值(即不继续使用它),可以忽略。所以这里通常没有move-result-object,因为我们继续使用v0(即原来的StringBuilder对象)。 3. 拼接字符串"b": const-string v1, "b" # 加载字符串"b"到v1(注意:可以复用v1,因为之前的值已经使用过了) invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; 4. 拼接字符串"c": const-string v1, "c" invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; 5. 调用toString方法: invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; # 调用toString move-result-object v1 # 将结果字符串移动到v1 最后,v1中存储了最终拼接的字符串。 但是,在实际情况中,编译器可能会进行优化,比如将多个字符串常量直接拼接成一个,但如果是变量拼接,则通常会使用上述模式。 另外,注意在循环中拼接字符串的情况,这时会看到循环体内重复调用append方法。 重要:在Smali中,我们可能会看到多个append方法调用,每个调用都针对一个部分(可能是字符串常量、变量、或其他类型)。对于不同类型,有对应的append方法重载(如append(int), append(Object)等)。 示例2:拼接字符串和整数 Java代码: String s = "Value: " + 123; Smali代码: new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V const-string v1, "Value: " invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const/16 v1, 0x7b # 123的十六进制 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; # 注意这里是append(I) invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 注意:整数123被编译为const/16 v1, 0x7b,然后调用append(I)方法。 总结:在Smali中分析字符串拼接,关键是识别StringBuilder对象的创建、一系列的append调用(注意参数类型)以及最后的toString调用。 相关问题: 1. 在Smali中,如何识别字符串拼接被优化为StringBuilder模式? 2. 除了StringBuilder,Smali中还有哪些字符串拼接方式? 3. 在循环中进行字符串拼接时,Smali代码有何特点?</think>### Smali代码中字符串拼接的StringBuilder.append分析 在Smali语言中,字符串拼接通常通过`StringBuilder`的`append`方法实现,这是Java编译器优化字符串操作的常见方式(如`"a" + "b"`会被编译为`StringBuilder`操作)。以下是逐步分析: --- #### 步骤1:创建StringBuilder对象 字符串拼接前会先创建`StringBuilder`实例: ```smali new-instance v0, Ljava/lang/StringBuilder; # 创建StringBuilder对象 invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V # 调用构造方法 ``` - **`new-instance`**:在寄存器`v0`中创建新对象 - **`invoke-direct`**:调用构造方法初始化对象[^1] --- #### 步骤2:使用append方法拼接字符串 通过多次调用`append`方法逐步构建字符串: ```smali const-string v1, "Hello, " # 加载字符串常量到v1 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; # 第一次append const-string v1, "World!" # 加载新字符串 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; # 第二次append ``` - **关键点**: - `append`方法返回`StringBuilder`对象本身(支持链式调用),但Smali中通常忽略返回值 - 寄存器`v1`被复用存放不同字符串常量 - 非字符串类型(如int)会调用重载方法,例如: ```smali const/16 v1, 0x64 # 加载整数100 (0x64) invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; # append(int) ``` --- #### 步骤3:转换为最终字符串 拼接完成后调用`toString`获取结果: ```smali invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 # 获取最终字符串 ``` - **`move-result-object`**:必须紧跟`invoke-virtual`捕获返回值[^2] - 最终结果存储在`v2`寄存器中 --- #### 完整示例分析 Java代码:`String result = "A" + 1 + "B";` 对应的Smali实现: ```smali new-instance v0, Ljava/lang/StringBuilder; # 步骤1: 创建StringBuilder invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V const-string v1, "A" # 步骤2: 拼接"A" invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const/4 v1, 0x1 # 加载整数1 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; # 拼接int const-string v1, "B" # 拼接"B" invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; # 步骤3: 转换 move-result-object v2 # v2 = "A1B" ``` --- #### 性能优化建议 1. **复用StringBuilder**:在循环中避免重复创建`StringBuilder` ```smali # 错误:每次循环创建新实例 :loop_start new-instance v0, Ljava/lang/StringBuilder; # 低效 ... # 正确:循环外创建,循环内reset new-instance v0, Ljava/lang/StringBuilder; :loop_start invoke-virtual {v0}, Ljava/lang/StringBuilder;->setLength(I)V # 清空内容 ``` 2. **预估容量**:减少扩容开销(Smali中需手动设置) ```smali const/16 v1, 100 invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(I)V # 初始化容量 ``` --- #### 常见问题排查 - **类型不匹配**:`append`参数类型需与方法签名一致,如`append(I)`对应`int`,`append(Ljava/lang/String;)`对应字符串[^3] - **结果丢失**:忘记`move-result-object`会导致返回值丢弃 - **寄存器冲突**:多次`append`时确保寄存器使用不冲突(如复用`v1`存放临时值) 通过分析`StringBuilder.append`的调用链,可准确还原原始代码的字符串拼接逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值