我想使用WebLogic10.3.6.0中的EclipseLink来托管使用JAX-WS的Web服务。这在Tomcat中工作得很好。
WEB-INF/lib包含:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "test_request")
public class TestRequestDTO implements Serializable {
@XmlPath("request/name/text()")
private String requestName;
@XmlPath("request/value/text()")
private String requestValue;
//getter setters
}
TestResponseDTo.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "test_response")
public class TestResponseDTO implements Serializable {
@XmlPath("response/name/text()")
private String responseName;
@XmlPath("response/value/text()")
private String responseValue;
//getter setters
}
服务:sampletest.java
@WebService
public class SampleTest {
@WebMethod
public TestResponseDTO fetchResponse(TestRequestDTO request) {
System.out.println("request.getRequestName()" + request.getRequestName());
System.out.println("request.getRequestValue()" + request.getRequestValue());
TestResponseDTO response = new TestResponseDTO();
response.html" target="_blank">setResponseName("Service Response");
response.setResponseValue(new Date().toString());
return response;
}
}
Tomcat中的完美XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://service.test.services.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:fetchResponse>
<arg0>
<request>
<name>this-that</name>
<value>home-run</value>
</request>
</arg0>
</q0:fetchResponse>
</soapenv:Body>
</soapenv:Envelope>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns0:fetchResponseResponse xmlns:ns0="http://service.test.services.com/">
<return>
<response>
<name>Service Response</name>
<value>Wed Feb 06 20:21:13 XXX 2013</value>
</response>
</return>
</ns0:fetchResponseResponse>
</S:Body>
</S:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://service.test.services.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:fetchResponse>
<arg0>
<requestName>hello</requestName>
<requestValue>wassup</requestValue>
</arg0>
</q0:fetchResponse>
</soapenv:Body>
</soapenv:Envelope>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:fetchResponseResponse xmlns:ns2="http://service.test.services.com/">
<return>
<responseName>Service Response</responseName>
<responseValue>Wed Feb 06 20:30:06 IST 2013</responseValue>
</return>
</ns2:fetchResponseResponse>
</S:Body>
</S:Envelope>
WebLogic10.3.6中的JAX-WS实现是硬编码的,以使用JAXB参考实现。EclipseLink JAXB(MOXy)是WebLogic 12.1.1的默认JAXB提供程序,您可以在JAX-WS Web服务中利用我们的所有扩展:
对于不提供与MOXy作为JAXB提供者的集成的JAX-WS实现,您可以使用javax.xml.ws.provider
接口来代替传统的服务endpoint接口。Provider允许您访问实际的XML消息。通过访问XML消息,您可以直接使用MOXY与它进行交互。
import javax.xml.bind.*;
import javax.xml.bind.util.JAXBSource;
import javax.xml.transform.Source;
import javax.xml.ws.*;
@ServiceMode(Service.Mode.PAYLOAD)
@WebServiceProvider(
portName = "FindCustomerPort",
serviceName = "FindCustomerService",
targetNamespace = "http://service.jaxws.blog/",
wsdlLocation = "WEB-INF/wsdl/FindCustomerService.wsdl")
public class FindCustomerService implements Provider<Source> {
private JAXBContext jaxbContext;
public FindCustomerService() {
try {
jaxbContext = JAXBContext.newInstance(FindCustomerResponse.class,
FindCustomerRequest.class);
} catch (JAXBException e) {
throw new WebServiceException(e);
}
}
@Override
public Source invoke(Source request) throws WebServiceException {
try {
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
FindCustomerRequest fcRequest = (FindCustomerRequest) unmarshaller
.unmarshal(request);
Customer customer = new Customer();
customer.setId(fcRequest.getArg0());
customer.setFirstName("Jane");
customer.setLastName("Doe");
FindCustomerResponse response = new FindCustomerResponse();
response.setValue(customer);
return new JAXBSource(jaxbContext, response);
} catch (JAXBException e) {
throw new WebServiceException(e);
}
}
}
有关更多信息
如前一个StackOverflow问题所述,我正在学习如何使用JAX-WS(用于XML Web服务的Java API)。我在以前的可执行Java程序中使用过Log4j2,我想用它来记录web服务请求。在本JAX-WS教程中,如何将Log4j2添加到基本代码中?
你好,我曾与JAX-WS合作开发基于SOAP的网络服务。现在我想使用REST,因为正如我从这里学习的那样,REST比SOAP有优势。 但从不同的文章中,我知道我们也可以从JAX-WS创建RESTful Web服务。但是大多数人说我们应该使用JAX-RS而不是JAX-WS。 我的问题是JAX-WS RESTful webservice和JAX-RS(泽西)之间有什么区别。JAX-RS相对于JAX-W
问题内容: 我想通过将其存储为Servlet上下文属性来在Servlet和Web服务(JAX-WS)之间共享一个对象。但是,如何从Web服务检索servlet上下文? 问题答案: JAX-WS通过消息上下文使servlet上下文可用,可以使用Web服务上下文来检索它。插入以下成员将使JAX- WS将对Web服务上下文的引用注入到您的Web服务中: 然后,您可以使用以下命令访问servlet上下文:
我有 Windows Server 2012 R2上的WebSphere Liberty 17.0.0.1“base_ilan”x86_64 Windows 10 x86_64上的Eclipse Neon.3(同一LAN上的独立服务器) Oracle Java JDK 1.8.0_121running Liberty 运行Eclipse的IBM JDK 8(来自Eclipse包)(需要它来支持Wi
问题内容: 如何在JAX-WS Web服务上引发自定义的肥皂错误?我怎么可以指定,和SOAP错误的?是否可以设置as bean而不是a的值? 请注意,我正在使用代码优先方法进行开发。 问题答案: 使用注释。 您可以在Java JAX-WS Web服务 中的使用SOAP错误和异常-Java上的Eben Hewitt中看到一个很好的示例。 您将看到示例: 更新 另一种方法是在子句中声明 典型的 异常。
我在weblogic 10.3.6中用JAX-WS实现了一个到不同类型Web服务的连接器,该连接器可以配置为2waySSL和代理,并将两者结合起来。 > 使用代理的实现使用ClientProxyFeature正常工作。 与使用自定义SSLSocketFactory的2waySSL相同,Oracle在留档中说。通过SSL保持请求的状态(仅限JAX-WS) 当组合这两个功能时会出现问题。握手没有发生(