import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.xml.ws.Endpoint;
@Configuration
public class WebServiceConfiguration {
private static final String BINDING_URI = "http://www.w3.org/2003/05/soap/bindings/HTTP/";
@Bean
public ServletRegistrationBean<CXFServlet> disServlet() {
return new ServletRegistrationBean<>(new CXFServlet(), "/soap-api/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
SpringBus bus = new SpringBus();
bus.setProperty("org.apache.cxf.stax.maxTextLength", 1024 * 1024 * 1024);
return bus;
}
@Bean
public Endpoint userServiceEndpoint(UserService userService) {
EndpointImpl endpoint = new EndpointImpl(springBus(), userService);
endpoint.setBindingUri(BINDING_URI);
endpoint.publish("/users");
return endpoint;
}
}
/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.3.2
* Generated source version: 2.2
*
*/
@WebService(name = "UserServiceSoap", targetNamespace = "http://User.no/webservices/")
@XmlSeeAlso({ObjectFactory.class})
public interface UserServiceSoap {
@WebMethod(operationName = "GetUser", action = "http://User.no/webservices/GetUser")
@WebResult(name = "GetUserResult", targetNamespace = "http://User.no/webservices/")
@RequestWrapper(localName = "UserServiceSoap", targetNamespace = "http://User.no/webservices/", className = "no.user.webservices.generated.UserServiceSoap")
@ResponseWrapper(localName = "UserServiceSoapResponse", targetNamespace = "http://User.no/webservices/", className = "no.user.webservices.generated.UserServiceSoapResponse")
public String getUser(@WebParam(name = "username", targetNamespace = "http://User.no/webservices/") String username);
}
服务实现:
@Service
@WebService(
endpointInterface = "no.altinn.webservices.generated.UserServiceSoap",
serviceName = "UserServiceSoapService",
targetNamespace = "http://User.no/webservices/",
portName = "UserServiceSoapPort"
)
@BindingType("http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/")
public class UserService implements UserServiceSoap {
@Override
public String getUser(String requestUsername) {
//logic
}
}
我想要什么?
是否有任何已经实现的方法来发布SOAPendpoint而不在spring配置中创建bean。我想通过服务实现的注释来实现,例如(@soapendpoint):
@Service
@SoapEndpoint(bindingUri = "http://www.w3.org/2003/05/soap/bindings/HTTP/",
publish = "/users")
@WebService(
endpointInterface = "no.altinn.webservices.generated.UserServiceSoap",
serviceName = "UserServiceSoapService",
targetNamespace = "http://User.no/webservices/",
portName = "UserServiceSoapPort"
)
@BindingType("http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/")
public class UserService implements UserServiceSoap {
@Override
public String getUser(String requestUsername) {
//logic
}
}
解决方法:
创建名为soapservice
和@soapendpoint
的空接口,并手动初始化endpoints
SoapService接口:
public interface SoapService {
}
@soapendpoint接口:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface SoapEndpoint {
String bindingUri() default "http://www.w3.org/2003/05/soap/bindings/HTTP/";
String publish();
}
@Configuration
public class WebServiceConfiguration {
private static final String BINDING_URI = "http://www.w3.org/2003/05/soap/bindings/HTTP/";
@Autowired
private List<SoapService> endpoints;
@Bean
public ServletRegistrationBean<CXFServlet> disServlet() {
return new ServletRegistrationBean<>(new CXFServlet(), "/soap-api/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
SpringBus bus = new SpringBus();
bus.setProperty("org.apache.cxf.stax.maxTextLength", 1024 * 1024 * 1024);
return bus;
}
@PostConstruct
public void init() {
for (SoapService bean : endpoints) {
if (bean.getClass().getAnnotation(SoapEndpoint.class) == null) {
throw new IllegalArgumentException("Missed @SoapEndpoint for " + bean.getClass().getName());
}
EndpointImpl endpoint = new EndpointImpl(springBus(), bean);
endpoint.setBindingUri(BINDING_URI);
endpoint.publish(bean.getClass().getAnnotation(SoapEndpoint.class).publish());
}
}
}
@Service
@SoapEndpoint(publish = "/users")
@WebService(endpointInterface = "no.altinn.webservices.generated.UserServiceSoap", serviceName = "UserServiceSoapService", targetNamespace = "http://User.no/webservices/", portName = "UserServiceSoapPort")
@BindingType("http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/")
public class UserService implements UserServiceSoap, SoapService {
@Override
public String getUser(String requestUsername) {
//logic
}
}
问题内容: 这与Spring 在服务层上使用 注释有关。 我经历了很多关于此的堆栈溢出问题,但是仍然对是否应该避免使用感到困惑。 如果有人帮助我找出以下查询的答案,那将是很大的帮助。 在具有复杂模式的应用程序中使用是不好的做法。 使用此过滤器可能会导致问题 如果我们正在使用,是否意味着不需要? 下面是我的Spring配置文件 问题答案: 是一个servlet过滤器,而不仅仅是打开一个hiberna
问题内容: 我有许多带有JAXB批注的实体,我想使用消息转换器将其转换为JSON。 我知道读取JAXB批注的ObjectMapper可以工作: 但是当我打电话给我的休息服务时,默认注册的MappingJacksonHttpMessageConverter(未配置为读取JAXB)似乎接管了- 由于@XmlTransient被忽略时由于循环引用而导致堆栈溢出… 如何配置Spring以使用Mapping
Swagger注释可以与发音和maven一起使用吗?我正在尝试添加swagger注释,但它不起作用,而是拾取默认的java doc注释。 尝试将scan或resourcePackage等参数添加到存在于swagger BaseConfig类中的expertion . XML的Swagger标记,但它似乎不支持这些参数。 pom中定义的依赖关系: Expuncate:groupId:com.webc
问题内容: 设置oneToOne关系时,我有两个表。Bill和BillSimpleEntry。(每个Bill都有一个BillSimpleEntry 这是他们的结构 JPA配置(票据实体的单据,用于oneToOne关系属性)。 我正在尝试通过billSimpleEntry.billId和bill.Id在Bill和BillSimpleEntry之间进行联接。但是我似乎出错了。 这是我得到的错误- 这是
我正在尝试将vaadin与spring(没有Spring Boot)和基于java注释的spring部分配置结合起来。 自动连接似乎适用于vaadin ui部分,但不适用于“自定义ui类”(例如,“公共类LoginScreen扩展自定义组件”)。我在SysOut上得到一个NPE或一个空对象。 此外,我注意到“@ComponentScan(base Packages={"net.myapp"})”没
问题内容: 即使经过了这一点,我仍然不清楚在以下代码中使用final如何导致安全发布。有人可以给出一个易于理解的解释吗? 问题答案: 编辑添加:关于Java和JSR-133 行为起源的 有趣观点。 有关如何在新JMM中正常工作的规范参考,以确保安全发布:http : //www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#finalRigh