如何使用JAX-WS配置WebLogic 10.3.6生成的Web服务,以将对象模式包含在单个WSDL文件声明中,而不是导入声明?
示例代码:
接口
import javax.ejb.Local;
@Local
public interface CustomerBeanLocal {
public void updateCustomer(Customer customer);
}
Run Code Online (Sandbox Code Playgroud)
会话Bean
import javax.ejb.Stateless;
import javax.jws.WebService;
@Stateless
@WebService
public class CustomerBean implements CustomerBeanLocal {
@Override
public void updateCustomer(Customer customer) {
// Do stuff...
}
}
Run Code Online (Sandbox Code Playgroud)
WSDL生成
我们需要在<xsd:import>
下面的示例中不使用标记导入模式定义,而是在WSDL中声明,这意味着所有合同信息都在单个WSDL文件中.没有其他文件的依赖.
<!-- ... -->
<types>
<xsd:schema>
<xsd:import namespace="http://mybeans/" schemaLocation="http://192.168.10.1:7001/CustomerBean/CustomerBeanService?xsd=1" />
</xsd:schema>
</types>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)
与WildFly相同的代码包含WSDL中的模式类型,并且不使用导入功能.经过一些研究后,我没有找到一种方法来配置bean /服务器在WebLogic中执行它(没有找到JAX-WS或WebLogic专有功能来执行此操作).
我理解具有导出模式(可重用性等)的好处,但是项目的要求是必须在WSDL内部声明类型,而不是导入.
我有一个由应用程序生成的XML文本,我需要在其周围包装一个SOAP信封,然后进行Web服务调用.
以下代码构建了信封,但我不知道如何将现有XML数据添加到SOAPBody
元素中.
String rawXml = "<some-data><some-data-item>1</some-data-item></some-data>";
// Start the API
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage request = mf.createMessage();
SOAPPart part = request.getSOAPPart();
SOAPEnvelope env = part.getEnvelope();
// Get the body. How do I add the raw xml directly into the body?
SOAPBody body = env.getBody();
Run Code Online (Sandbox Code Playgroud)
我尝试了body.addTextNode()
但是它增加了内容,<
而其他人则逃脱了.
我试图在WildFly 10.1中转储由MySQL数据源管理的泄漏连接,但我无法找到泄漏文件或泄漏转储.
为什么leaks.txt
文件没有生成?而且,我应该在哪里寻找文件?
我在standalone.bat
文件中注册了泄漏连接池:
"JAVA_OPTS=%JAVA_OPTS% -Dironjacamar.mcp=org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool -Dironjacamar.leaklog=leaks.txt"
Run Code Online (Sandbox Code Playgroud)
我可以确认在WildFly中设置属性,因为日志中显示:
JAVA_OPTS: "-Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Dironjacamar.mcp=org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool -Dironjacamar.leaklog=leaks.txt"
Run Code Online (Sandbox Code Playgroud)
之后,我在模拟应用程序中泄漏了一些连接以生成数据.然后我运行CLI命令刷新所有连接获得肯定响应:
[standalone@localhost:9990 /] /subsystem=datasources/data-source=mysql-ds:flush-all-connection-in-pool
{"outcome" => "success"}
Run Code Online (Sandbox Code Playgroud)
但我无法在leaks.txt
任何地方找到该文件.
我正在使用这篇文章以及IronJacamar泄漏文档作为参考.
检漏池使用ironjacamar.mcp系统属性配置,值为
org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool
此配置适用于IronJacamar使用的所有连接池.
系统属性ironjacamar.leaklog可用于将泄漏转储到与日志记录设置分开的特殊文件中.
一个例子
-Dironjacamar.mcp=org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool -Dironjacamar.leaklog=leaks.txt
线程969369在JBoss论坛中创建,因此他们也可以帮助它.
Bug报道了JBJCA-1360.
我已经使用 wsimport 和其他 Metro 工具很多年了,但自从 Java 11 中删除了 Java EE 模块后,我找不到这些工具了。
我在哪里可以找到wsimport
可执行文件?
我们的项目有多个EJB模块,我们希望persistence.xml
在它们之间共享一个文件.
我们将persistence.xml
文件放在EARs META-INF目录中,但持久性单元在运行时不可用.似乎文件永远不会被读取,因为我们强制使用不正确的类和jar文件,但没有任何反应.
为什么WebLogic不读取persistence.xml
EAR中的文件?
运行代码时出现以下错误,未找到PU(可用持久性单位:[]).
Caused By: java.lang.IllegalArgumentException: No persistence unit named 'em' is available in scope ejb1-module.jar. Available persistence units: []
Run Code Online (Sandbox Code Playgroud)
persistence.xml中
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="system-unit" transaction-type="JTA">
<jta-data-source>sysmtem-ds</jta-data-source>
<jar-file>../ejb1-module.jar</jar-file>
<class>...</class>
<class>...</class>
<class>...</class>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
结构(持久性单元放在EAR内)
EAR +
|- META-INF +
| - persistence.xml
|- ejb1-module.jar
|- ejb2-module.jar
|- ejb3-module.jar
Run Code Online (Sandbox Code Playgroud)
我们正在使用WebLogic 10.3.6,它使用JPA 1.0和TopLink/EclipseLink.
如何使用Mockito或PowerMock来模拟由子类实现但从抽象超类继承的受保护方法?
换句话说,我想在模拟"doSomethingElse"时测试"doSomething"方法.
抽象超级
public abstract class TypeA {
public void doSomething() {
// Calls for subclass behavior
doSomethingElse();
}
protected abstract String doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
子类实现
public class TypeB extends TypeA {
@Override
protected String doSomethingElse() {
return "this method needs to be mocked";
}
}
Run Code Online (Sandbox Code Playgroud)
解
这里给出的答案是正确的,如果涉及的类在同一个包中,它们将起作用.
但是如果涉及不同的包,则可以选择用户PowerMock.以下示例适用于我.当然可能有其他方法可以做到这一点,这是有效的.
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ TypeB.class })
public class TestAbstract {
@Test
public void test_UsingPowerMock() throws Exception {
// Spy …
Run Code Online (Sandbox Code Playgroud) 在使用 Deno 时,我经常发现自己至少输入了两到三个权限选项:
deno run --allow-net --allow-read --allow-env app.ts
Run Code Online (Sandbox Code Playgroud)
有一种方法可以逃避显式权限。
使用JBoss/Wildfly,可以使用@TransactionTimeout
专有注释并为特定会话Bean定义事务超时.
使用IBM WebSphere执行此操作的等效方法是什么?
我们正在使用EJB Timer,其中一个Bean将在一个多小时内完成.
Wildfly的示例代码:
import org.jboss.ejb3.annotation.TransactionTimeout;
@Stateless
@TransactionTimeout(value=7200)
public class TimerBean {
}
Run Code Online (Sandbox Code Playgroud)
注意:使用WebSphere 8.5.修改全局事务时间不是一个选项,我们需要为特定的会话Bean或可能的应用程序(EAR)执行此操作.
在下面的代码中,我试图强制特定bean设置的事务超时,其事务时间短于方法完成所花费的时间.
超时设置为3秒,方法完成所需的时间为5秒.
我正在使用便携式解决方案,它指的是BMT的组合并使用该setTransactionTimeout
方法设置超时.
我希望交易失效给我一个例外,但事实并非如此.
我究竟做错了什么?
@Singleton
@Startup
@TransactionManagement(TransactionManagementType.BEAN)
public class TimerSingleton {
@Inject
private UserTransaction ut;
@PostConstruct
public void execute() throws Exception {
ut.begin();
ut.setTransactionTimeout(3); // Transaction should timeout after 3 seconds
System.out.println(">>> Executing...");
Thread.sleep(5000); // Block for 5 seconds
ut.commit();
System.out.println(">>> Completed");
}
}
Run Code Online (Sandbox Code Playgroud)
该方法完全执行:
17:00:12,138 INFO [stdout] (ServerService Thread Pool -- 85) >>> Executing...
17:00:17,139 INFO [stdout] (ServerService Thread Pool -- 85) >>> Completed
Run Code Online (Sandbox Code Playgroud)
我正在使用Wildfly 8.2并且我知道@TransactionTimeout
注释,但它是专有的,我想知道如何以便携方式控制它.