如何实现类似的目标:
@WebService(endpointInterface = "ru.citc.techtest.cxfconcepts.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHi(DOMSource xml) {
return "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
我需要原始 XML 进行处理(SAX 或 DOM)。同时我想利用 JAX-WS 的现有方法路由。(我使用 Apache CXF)返回值可以是任何类型。
我目前正在使用 JAX-WS 参考实现(版本 2.1.7)开发一些 Web 服务。它们是基于合同的,即 WSDL 和 XSD 文件不是由 wsgen 生成的。
这使我能够自由地使用 XSD 限制来加强对通过 SOAP 消息传递到我的服务的值的验证。以下是此类“受限”XSD 元素的两个示例:
<xsd:element name="maxResults" minOccurs="1">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:minInclusive value="1"/>
<xsd:maxInclusive value="1000"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="lastName" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:maxLength value="25"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)
我将@SchemaValidation注释添加到我的服务类中以强制架构验证。但是,JAX-WS 并不按预期强制执行验证规则。行为如下:
maxResults)。maxResults> 1000 或maxResults< 1)会通过验证过程而不被报告,并被注入到我的 JAXB 生成的 Java 结构中。无论类型如何,即使负值也被认为是有效的xsd:positiveInteger!lastName也不报告字符串长度约束违规(例如,长度超过 25 个字符)。换句话说,<xsd:element>标签中出现的限制是正确执行的,但<xsd:restriction>在基于 JAX-WS 的上下文中使用时,JAXB 似乎完全忽略了元素。
我编写了一个测试类来使用裸 JAXB(无 …
所以我试图使用带有 JAX-WS 的 SOAP 1.2 版的 WSDL,但是它只会生成 1.1 版。我正在使用 Maven 来使用 WSDL。使用 WSDL 的 POM 文件如下所示。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlFiles>
<wsdlFile>MEAI_OnlineServices.webServices.Volubill_selfCare_04.wsdl</wsdlFile>
</wsdlFiles>
<bindingDirectory>${basedir}/src/wsdl</bindingDirectory>
<extension>true</extension>
<protocol>Xsoap1.2</protocol>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
以下是来自 WSDL 的片段
<wsdl:definitions name="selfCare" targetNamespace="http://eaidev.mobinil.com/MEAI_OnlineServices/webServices/Volubill/selfCare"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapjms="http://www.w3.org/2008/07/soap/bindings/JMS/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://eaidev.mobinil.com/MEAI_OnlineServices/webServices/Volubill/selfC
are" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/">
Run Code Online (Sandbox Code Playgroud)
然后在宣布操作时,我有以下内容。
<soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="deleteBucket">
<soap12:operation soapAction="MEAI_OnlineServices_webServices_Volubill_selfCare_Binder_deleteBucket" style="document"/>
<wsdl:input>
<soap12:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
Run Code Online (Sandbox Code Playgroud)
我无法设法让这个建筑成为 1.2 版本。我有 2 个绑定文件,如下所示,它们将阻止 WSDL 的一部分生成 void …
我的问题是我用wsimport创建了一个 web 服务客户端,在创建它的服务对象时,它由于 HTTPS 而失败,如下所示:
MyService_Service service = new MyService_Service(
new URL("https://www.aaa.com/myws/MyService?WSDL"));
Run Code Online (Sandbox Code Playgroud)
因此,我正在尝试从 WSDL 文件初始化服务对象,但是如何从该 URL“ https://www.aaa.com/myws/MyService?WSDL ”创建 WSDL 文件?
非常感谢。
在我的基于 spring boot ws 的应用程序中,我按照契约优先的方法创建了一个 jax-ws 网络服务。Web 服务已启动,但我无法在我的 Web 服务中自动装配其他 bean。
我如何将 spring 中的 webservice 定义为 bean?
以下是我的 webservice impl 类:
@WebService(endpointInterface = "com.foo.bar.MyServicePortType")
@Service
public class MySoapService implements MyServicePortType {
@Autowired
private MyBean obj;
public Res method(final Req request) {
System.out.println("\n\n\nCALLING.......\n\n" + obj.toString()); //obj is null here
return new Res();
}
}
Run Code Online (Sandbox Code Playgroud)
MyServicePortType 由 maven 从 wsdl 文件生成
当我调用这个服务(通过 SoapUi)时,它给出了NullPointerException因为 MyBean 对象不是自动装配的。
由于我的应用程序是基于 Spring Boot 构建的,因此没有 xml 文件。目前我有sun-jaxws.xml带有端点配置的文件。如何在 Spring Boot 应用程序中进行以下配置
<wss:binding url="/hello">
<wss:service>
<ws:service …Run Code Online (Sandbox Code Playgroud) 我的第一个 Web 服务版本使用普通JDBC来连接到底层数据库。我已经使用JUnit. 我在Jboss EAP 6.4. 到现在为止还挺好。
我修改了我的应用程序代码以使用 Jboss 的 JDBC 连接池。似乎Jboss 7+不允许从外部(从服务器外部)引用数据源。虽然该服务仍能正常工作,但我的单元测试现已损坏。我想知道如何解决这个问题。
我正在考虑重新编写相同的测试来测试服务而不是应用程序代码。一种方法是使用 wsimport 生成存根,然后编写客户端。然后我可以使用 JUnit 来测试客户端。问题是必须手动创建存根,并且每次 WSDL 更改时
我正在寻找一种有效的方法来实现这一目标。理想的框架是接受一个WSDL(或服务的 url)的 url,然后允许我调用服务操作。
我知道以上不再是单元测试而是集成测试。这种方法是测试JAX-WS服务的最佳方式吗?
我的任务是编写 Java Web 服务以在我们的企业环境中集成两个不同的系统。由于我实际上是一名经验丰富的 C#.NET MVC 开发人员并且只认为自己是 Java 中级,因此我开始搜索“Java Web 服务教程”。我正在尝试运行此通用教程,但由于 HTTP 404 错误,我无法运行教程服务。
我在Netbeans 8.0.2 中使用 Java Web 应用程序模板。我使用JDK 1.6.0.25来编译教程(因为我需要编写的最终服务需要这个 Java 版本与我将使用的其他一些 JAR 兼容)。一切都编译成 WAR 文件就好了。
然后,我通过加载服务器的 Tomcat 管理器 GUI 并使用WAR 文件部署功能来部署 WAR 文件。当我这样做时,WAR 文件被复制,应用程序启动。但是,当我尝试通过教程中的链接“ http://localhost:8080/HelloWorld/hello ”访问该服务时,该服务返回 404 错误。
如果建议我需要更改 Java 或 Tomcat 版本或平台,我也需要知道这一点,因为我对这些技术几乎没有经验。但是,由于 Linux 发行版的限制(根据我的服务器管理员),我可能无法更改所有因素。
您能帮我将以下基于 spring xml 的配置转换为基于 Java 的 bean 配置吗?
<jaxws:client id="helloClient"
serviceClass="demo.spring.HelloWorld"
address="http://localhost:9002/HelloWorld" />
Run Code Online (Sandbox Code Playgroud) 我们正在调用用于cxf-codegen-plugin从 WSDL 生成代码的Web 服务,并在 Spring xml 中配置了 JAX-WS 客户端,如下所示:
<jaxws:client id="abcApiInterface" serviceClass="abc.api.AbcApi" address="${xyz.abcApi.endpoint}" />
Run Code Online (Sandbox Code Playgroud)
我们有由 Apache CXF 3.0.3 生成的 Web 服务接口。我们在调用该服务时看到超时,我们没有在客户端指定任何超时,所以只想知道 JAX-WS 客户端超时的默认值是多少?
我有一个带有 cxf 的 Spring Boot SOAP 服务,我的消费者在 http 标头中向我传递 SSO 令牌。我能够使用 JAX-WS 处理程序检索 SSO 令牌。我正在将该 SSO 令牌保存到处理程序类级别变量中,并且在通过各种类进行控制之后,它到达了一个点,我必须向另一个服务发出请求并且必须传递相同的 SSO 令牌,但是在我的 Connection 类中,SSO令牌值为 NULL。
@Component
public class EndPointHandler implements SOAPHandler<SOAPMessageContext> {
private List<String> ssoToken;
private Map<String, List<String>> headers;
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean isResponse = (Boolean) context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (!isResponse) {
headers = ((Map<String, List<String>>) context.get(MessageContext.HTTP_REQUEST_HEADERS));
if (headers != null) {
if (!headers.get("SSOToken").get(0).isEmpty()) {
List<String> ssoToken = headers.get("SSOToken");
LOGGER.info(ssoToken.get(0));
this.ssoToken = ssoToken;
} else {
LOGGER.error("SSO Token value cannot be empty"); …Run Code Online (Sandbox Code Playgroud) jax-ws ×10
java ×7
web-services ×7
cxf ×2
soap ×2
spring ×2
spring-boot ×2
maven ×1
restriction ×1
timeout ×1
tomcat ×1
unit-testing ×1
validation ×1
wsdl ×1
wsimport ×1
xsd ×1