我正在使用CXF
(wsdl2java)wsdl
文件生成类,但一个枚举被映射到String
only。
如果我打开生成的类,这是 wsdl 片段:
<complexType>
<complexContent>
<restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
<attribute name="Type" use="required">
<simpleType>
<restriction base="{http://www.w3.org/2001/XMLSchema}string">
<enumeration value="AAA"/>
<enumeration value="VVV"/>
</restriction>
</simpleType>
</attribute>
</restriction>
</complexContent>
</complexType>
Run Code Online (Sandbox Code Playgroud)
为什么结果是 aString
而不是 an Enum
?这是自动生成的结果:
private String type;
public String getType() {
return type;
}
public void setType(String value) {
this.type = value;
}
Run Code Online (Sandbox Code Playgroud)
更新:自定义绑定文件:
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
jaxb:version="2.1">
<jaxb:bindings>
<jaxb:bindings node="//xs:attribute[@name='Type']/xs:simpleType">
<jaxb:typesafeEnumClass ref="TestEnum" />
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud) 这就是我所拥有的:
@XmlSchemaType(name = "dateTime")
@Column(name = "expiry-date", nullable = false)
protected XMLGregorianCalendar expiryDate;
Run Code Online (Sandbox Code Playgroud)
抛出以下异常:
org.hibernate.MappingException: Could not determine type for: javax.xml.datatype.XMLGregorianCalendar
Run Code Online (Sandbox Code Playgroud)
谢谢
我想用 JUnit 和 Apache CXF 编写一个简单的集成测试来测试一些支持 WS-Security 的服务。当我尝试运行我的代码时:
MyService myService = new myWsService(MY_SERVICE_WSDL).getMyWs()
Client client = ClientProxy.getClient(myService);
Map<String, Object> ctx = ((BindingProvider) myService).getRequestContext();
ctx.put("ws-security.callback-handler", new KeystorePasswordCallback());
ctx.put("ws-security.signature.crypto", new MyMerlinImpl());
Run Code Online (Sandbox Code Playgroud)
MyMerlinImpl 只是在重写loadProperties
方法中传递所需的 Merln.* 属性值,
我得到:
sie 12, 2015 11:52:10 AM org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl handleNoRegisteredBuilder
WARNING: No assertion builder for type {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}AsymmetricBinding registered.
sie 12, 2015 11:52:10 AM org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl handleNoRegisteredBuilder
WARNING: No assertion builder for type {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}InitiatorToken registered.
sie 12, 2015 11:52:10 AM org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl handleNoRegisteredBuilder
WARNING: No assertion builder for type {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}X509Token …
Run Code Online (Sandbox Code Playgroud) I am migrating my application from jboss-eap-5.1 to jboss-eap-6.4.0. My application is using spring 3.1.1 related jar and apache-cxf-2.7.7 jars.
Ear file structure is as below
EAR/lib - contains all the jar which is common for wars.
app1.war/lib - contains jars required for it
app2.war/lib - contains jars required for it
I have also excluded modules for webservice, org.jboss.as.jaxrs & ejb3 from standalong.xml config file.
Spring jars :
spring-orm-3.1.1.RELEASE.jar
spring-aop-3.1.1.RELEASE.jar spring-oxm-3.2.4.RELEASE.jar
spring-asm-3.1.1.RELEASE.jar spring-test-3.2.4.RELEASE.jar
spring-beans-3.1.1.RELEASE.jar spring-tx-3.1.1.RELEASE.jar
spring-context-3.1.1.RELEASE.jar spring-web-3.2.4.RELEASE.jar
spring-core-3.1.1.RELEASE.jar spring-webmvc-3.2.4.RELEASE.jar
spring-data-commons-core-1.1.0.RELEASE.jar …
Run Code Online (Sandbox Code Playgroud) 我正在尝试重新解决一个问题。http 响应标头:Transfer-Encoding: chunked
我们在 spring-boot + 嵌入式 tomcat 中有一个 CXF-SOAP Web 服务。
SOAP 响应有一个Content-Length
标头,但没有Transfer-Encoding
……我猜这很正常?
不幸的是,我们有一些遗留的客户端黑客,它们似乎只适用Transfer-Encoding: chunked
于Content-Length
.
有没有办法强制服务器应用程序响应Transfer-Encoding: chunked
?
到底是什么决定了生成哪种响应格式?
它可以以某种方式配置吗?
我有一个用例,我需要限制可以作为查询参数传递的值。
\n\n@Path("/foo")\npublic interface Foo {\n\n @GET\n @Path("/details/id/{id}")\n void getFooDetails(@PathParam("id") String id, @QueryParam("sort") String sortDirection);\n}\n\npublic class FooImpl {\n public void getFooDetails(String id, String sortDir) {\n //Implementation\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n在上面的示例中,我想限制sort
可以通过 API 传递到ASC, DESC
.
是否有任何现有的 CXF 注释可以用来限制参数的值?我还没有找到任何解决方案,所以我尝试了以下解决方案。
\n\n我的方法:
\n\n@Target({ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD})\n@Retention(RetentionPolicy.RUNTIME)\n@Inherited\npublic @interface ValueSet {\n\n String[] allowedValues();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n修改后的界面如下所示。
\n\n@Path("/foo")\npublic interface Foo {\n\n @GET\n @PathParam("/details/id/{id}")\n void getFooDetails(@PathParam("id") String id, @QueryParam("sort") @ValueSet(allowedValues = {"ASC", "DESC"}) String sortDirection);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n我编写了一个 CXF 拦截器来拦截 API 调用。我使用反射来处理参数FooImpl.getFooDetails
。但我面临的问题是,拦截器查看 FooImpl.getFooDetails …
请找到我面临的错误:在 springboot 2.1.1 中,我遇到以下错误:
应用程序无法启动
描述:org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration 中构造函数的参数 1 需要类型为“org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath”的 bean,但无法找到。找到了以下候选,但无法注入: - 'DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration' 中的 Bean 方法 'dispatcherServletRegistration' 未加载,因为 DispatcherServlet Registration 发现非调度程序 Servlet DispatcherServlet
行动:
考虑重新访问上面的条目或在配置中定义“org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath”类型的 bean。
我的配置:
@Configuration
public class CXFConfig {
@Bean
public ServletRegistrationBean dispatcherServlet() {
final ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFCdiServlet(), "/services/*");
servletRegistrationBean.setLoadOnStartup(1);
return servletRegistrationBean;
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
SpringBus springBus = new SpringBus();
springBus.getInInterceptors().add(new AppInboundInterceptor());
springBus.getOutInterceptors().add(new AppOutboundInterceptor());
return springBus;
}
}
Run Code Online (Sandbox Code Playgroud)
请确认如何配置?
dispatcherServlet()
方法不适用于Springboot 2.1.1
我们在运行 openjdk 版本“1.8.0_201”的 RedHat linux 环境中的 tomcat 8 上进行 SOAP 客户端调用时遇到问题,而在 Windows 计算机(tomcat 8、Oracle java 8)上使用类似的配置进行相同的调用则可以正常工作,并且AIX(Oracle java 8、tomcat 7)。
这是堆栈跟踪:
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2401)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:859)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1185)
at org.apache.cxf.ws.addressing.impl.AddressingFeatureApplier.initializeProvider(AddressingFeatureApplier.java:36)
at org.apache.cxf.ws.addressing.WSAddressingFeature.initializeProvider(WSAddressingFeature.java:46)
at org.apache.cxf.feature.AbstractFeature.initialize(AbstractFeature.java:49)
at org.apache.cxf.frontend.ClientFactoryBean.applyFeatures(ClientFactoryBean.java:112)
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:100)
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:157)
at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)
at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:476)
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:343)
at javax.xml.ws.Service.getPort(Service.java:160)
Run Code Online (Sandbox Code Playgroud)
使用cxf版本2.7.18
pom.xml 片段
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.16</version> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试集成需要 URL 中的签名查询参数的 Apple Map Web Snapshot。我能够在 NPM 的 JWA 包中成功生成和验证 ES256 签名,但不能在 Java 中生成和验证。请帮助我找到等效的库以生成有效的签名,我在 Java 中尝试了几个 JWA 库。
// Required modules.
const { readFileSync } = require("fs");
const { sign } = require("jwa")("ES256");
/* Read your private key from the file system. (Never add your private key
* in code or in source control. Always keep it secure.)
*/
const privateKey = readFileSync("[file_system_path]");
// Replace the team ID and key ID values with your actual values.
const teamId = …
Run Code Online (Sandbox Code Playgroud) 我有一个由CXF使用本地wsdl文件生成的客户端.客户端连接正常,我从Web服务器收到预期的401错误.
我遇到的问题是无法在客户端中正确配置抢占式身份验证.
我尝试过很多东西都无济于事.Web上的大多数示例似乎都集中在Spring上,而不是简单的旧Java方法.
我包括客户的主要部分.如果有人能给我一个如何配置它的例子,我会很感激.请注意,我不是在寻找任何花哨的东西.我只需要能够验证并调用服务.
public final class ServiceNowSoap_ServiceNowSoap_Client {
private static final QName SERVICE_NAME = new QName(
"http://www.service-now.com/foo",
"ServiceNow_foo");
private ServiceNowSoap_ServiceNowSoap_Client() {
}
public static void main(String args[]) throws java.lang.Exception {
URL wsdlURL = ServiceNowCmdbCiComm.WSDL_LOCATION;
if (args.length > 0 && args[0] != null && !"".equals(args[0])) {
File wsdlFile = new File(args[0]);
try {
if (wsdlFile.exists()) {
wsdlURL = wsdlFile.toURI().toURL();
} else {
wsdlURL = new URL(args[0]);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
ServiceNowFoo ss = new ServiceNowFoo(wsdlURL, …
Run Code Online (Sandbox Code Playgroud) cxf ×10
java ×7
soap ×4
spring ×2
web-services ×2
apache ×1
cryptography ×1
enums ×1
hibernate ×1
jax-rs ×1
jboss-eap-6 ×1
jwt ×1
mapkit ×1
preemptive ×1
rest ×1
spring-boot ×1
tomcat ×1
ws-security ×1
wsdl ×1