我尝试在我的项目中使用Apache CXF。所以我设置了一个xml文件cxf-client.xml
,其中我放了这段代码:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
xsi:schemaLocation="http://cxf.apache.org/transports /http/configuration
http://cxf.apache.org/schemas/configuration/http-conf.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<http-conf:conduit name="*.http-conduit">
<http-conf:client ConnectionTimeout="3000" ReceiveTimeout="3000"/>
</http-conf:conduit>
</beans>
我的问题是我如何以及在何处阅读此文件以正确执行我的项目?我需要更多配置吗?
这是我的客户端类java:
@WebServiceClient(name = "name",
wsdlLocation = "sourse?wsdl",
targetNamespace = "myNameSpace")
public class MyClass extends Service {
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName("myNameSpace", "name");
public final static QName MyEndpointServiceImplPort = new QName("myNameSpace", "MyEndpointServiceImplPort");
static {
URL url = null;
try {
String urlString = System.getProperty("webservice.trainmission.url");
url = new URL(urlString);
} catch (MalformedURLException e) {
e.getMessage();
}
WSDL_LOCATION = url;
}
public MyClass(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
@WebEndpoint(name = "MyEndpointServiceImplPort")
public MyEndpointServicePortType getMyEndpointServiceImplPort() {
return super.getPort(MyEndpointServiceImplPort, MyEndpointServicePortType.class);
}
这是我的web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com /xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>MyProject</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:conf/cxf-client.xml
</param-value>
</context-param>
<servlet>
<description>Apache CXF Endpoint</description>
<display-name>cxf</display-name>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet- class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<listener>
<display-name>Spring Web Context Loader Listener</display-name>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
当我创建MyClass
的实例时,它在此行super(wsdlLocation, serviceName);
中被阻止,并且它不使用我配置它的超时
答案 0 :(得分:0)
当构造函数尝试从wsdlLocaltion下载WSDL时,似乎您的服务被阻止。 CXF超时不适用于此处。确保wsdlLocation的URL是可访问的。如果不是
1)指向本地wsdl文件。
File wsdlFile = new File(wsdl);
wsdlLocation = wsdlFile.toURI().toURL();
2)配置不带WDSL的CXF Web服务
请参阅https://stackoverflow.com/a/19827446/6371459
QName qname = new QName("http://thenamespace", "FooService");
FooService service = new FooService(null, qname); // null for ignore WSDL
Foo port = service.getFooPort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext()
.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://foo.com/soap/fooBean");