IllegalArgumentException: key cannot be null - which key?

Trying to create a demo contract is the first service from the WSDL sample (using CXF 2.7.1 ):

<?xml version='1.0' encoding='UTF-8'?> <wsdl:definitions name="OrderProcessService" targetNamespace="http://order.demo/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://order.demo/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://order.demo/" xmlns:tns="http://order.demo/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="processOrder" type="tns:processOrder" /> <xs:element name="processOrderResponse" type="tns:processOrderResponse" /> <xs:complexType name="processOrder"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="tns:order" /> </xs:sequence> </xs:complexType> <xs:complexType name="order"> <xs:sequence> <xs:element minOccurs="0" name="customerID" type="xs:string" /> <xs:element minOccurs="0" name="itemID" type="xs:string" /> <xs:element name="price" type="xs:double" /> <xs:element name="qty" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:complexType name="processOrderResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="processOrderResponse"> <wsdl:part element="tns:processOrderResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="processOrder"> <wsdl:part element="tns:processOrder" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:portType name="OrderProcess"> <wsdl:operation name="processOrder"> <wsdl:input message="tns:processOrder" name="processOrder"> </wsdl:input> <wsdl:output message="tns:processOrderResponse" name="processOrderResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="OrderProcessServiceSoapBinding" type="tns:OrderProcess"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="processOrder"> <soap:operation soapAction="" style="document" /> <wsdl:input name="processOrder"> <soap:body use="literal" /> </wsdl:input> <wsdl:output name="processOrderResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="OrderProcessService"> <wsdl:port binding="tns:OrderProcessServiceSoapBinding" name="OrderProcessPort"> <soap:address location="http://localhost:8080/OrderProcess" /> </wsdl:port> </wsdl:service> </wsdl:definitions> 

I posted the following:

 wsdl2java -ant -impl -server -d src OrderProcess.wsdl 

Source code generation is going well, but when I try to build a server using ant OrderProcessServer , I get the following exception:

 OrderProcessServer: [java] Starting Server [java] Exception in thread "main" java.lang.ExceptionInInitializerError [java] at org.eclipse.jetty.util.component.AbstractLifeCycle.<clinit>(AbstractLifeCycle.java:33) [java] at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.activate(JettyHTTPDestination.java:178) [java] at org.apache.cxf.transport.AbstractObservable.setMessageObserver(AbstractObservable.java:48) [java] at org.apache.cxf.binding.AbstractBaseBindingFactory.addListener(AbstractBaseBindingFactory.java:95) [java] at org.apache.cxf.binding.soap.SoapBindingFactory.addListener(SoapBindingFactory.java:895) [java] at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:131) [java] at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:360) [java] at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:251) [java] at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:152) [java] at javax.xml.ws.Endpoint.publish(Endpoint.java:57) [java] at demo.order.OrderProcess_OrderProcessPort_Server.<init>(OrderProcess_OrderProcessPort_Server.java:19) [java] at demo.order.OrderProcess_OrderProcessPort_Server.main(OrderProcess_OrderProcessPort_Server.java:23) [java] Caused by: java.lang.IllegalArgumentException: key can't be empty [java] at java.lang.System.checkKey(System.java:774) [java] at java.lang.System.getProperty(System.java:647) [java] at org.eclipse.jetty.util.log.Log$1.run(Log.java:122) [java] at java.security.AccessController.doPrivileged(Native Method) [java] at org.eclipse.jetty.util.log.Log.<clinit>(Log.java:85) [java] ... 12 more [java] Java Result: 1 BUILD SUCCESSFUL Total time: 2 seconds 

My questions:

  • What key?
  • How to ensure this so that I don't get an exception?
  • Why is wsdl2java creating incomplete code? (i.e. not enough .wsdl file?)

UPDATE: The ANT build.xml file created by the wsdl2java command has these two seemingly corresponding lines:

 <sysproperty key="java.util.logging.config.file" value="${cxf.etc.dir}/logging.properties"/> <sysproperty key="log4j.configuration" value="file:///${cxf.etc.dir}/log4j.properties"/> 
  • Are they key (no pun intended) for the problem?
  • If so, what values โ€‹โ€‹should be placed there to fix this?
  • How do I tell wsdl2java to generate code that I donโ€™t need to fix?
+4
source share
2 answers

The Jetty Log implementation reads system properties as follows:

 Enumeration<String> systemKeyEnum = Enumeration<String>)System.getProperties().propertyNames(); while (systemKeyEnum.hasMoreElements()) { String key = systemKeyEnum.nextElement(); String val = System.getProperty(key); // ... (process key/values) } 

For some reason, you managed to get a blank key: "" in the properties of your system. Therefore, check all the places where you programmatically set the system properties (System.setProperty) and your java command line for the -D options. If this does not help, try to print the properties of your system before this exception occurs, or run a jpda debugging session and place a breakpoint either in log line 122 and in System.checkKey ().

+3
source

Empty keys come from the cxfrun macro in the generated ant script, build.xml.

Comment it this way and you should be fine:

 <arg value="@{param1}"/> <arg value="@{param2}"/> <arg value="@{param3}"/> <arg value="@{param4}"/> <arg value="@{param5}"/> <jvmarg value="${cxf.endorsed.flag}"/> <!-- Commented out to remove empty keys in system properties --> <!-- jvmarg value="@{jvmarg1}"/> <jvmarg value="@{jvmarg2}"/> <jvmarg value="@{jvmarg3}"/> <jvmarg value="@{jvmarg4}"/> <jvmarg value="@{jvmarg5}"/ --> 
+1
source

All Articles